20191016
时间:2019-10-16
本文章向大家介绍20191016,主要包括20191016使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
T1 100pts
大水题,特判即可过。。。
可是我写了gcd()
ri~~
#include<bits/stdc++.h>
#define R register int
#define ll long long
using namespace std;
namespace Luitaryi {
inline ll g() { register ll x=0,f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*f;
}
int T,Caz; ll n,m,k,l;
inline ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
inline void main() {
g(); T=g(); while(T--) {
n=g(),m=g(),k=g(); l=2ll*(n+m);
printf("Case %d: ",++Caz);
if(m==0) {puts("Winter"); continue;}
if(k>n+m) {puts("Summer"); continue;}
if(k<=m&&(k/gcd(m,k))&1) {puts("Winter"); continue;}
for(register ll L=l,cnt=0,lim=2*k;cnt<=5&&L>=lim;++cnt,L-=2) {
register ll t=gcd(k,L);
if(m%t==0) {puts("Winter"); goto end;}
} puts("Summer"); end:;
}
}
} signed main() {Luitaryi::main(); return 0;}
T2 0pts
并查集,不会。
答案 \(=qpow(2,cnt-1)\)
原因是我们可以将合法的连通块看成二分图。我们需要将所有的二分图合并起来(就是上下随便放,共两种情况)。但是有上下反转同构。
#include<bits/stdc++.h>
#define R register int
using namespace std;
const int N=100010,M=998244353;int n,m,T,fa[N],d[N];
inline int getf(int x) {if(x==fa[x]) return x;R f=getf(fa[x]); d[x]^=d[fa[x]]; return fa[x]=f;}
inline void merge(int u,int v,int w) {R uf=getf(u),vf=getf(v);fa[uf]=vf,d[uf]=d[u]^d[v]^w;}
inline int qpow(int a,int b) {R ret=1;for(;b;b>>=1,a=1ll*a*a%M)if(b&1)ret=1ll*ret*a%M;return ret;}
int main() {
scanf("%d%d",&n,&T);while(T--){bool flg=0;scanf("%d%d",&n,&m);memset(d,0,sizeof d);
for(R i=1;i<=n;++i)fa[i]=i;for(R i=1,u,v,w;i<=m;++i){scanf("%d%d%d",&u,&v,&w);
if(getf(u)!=getf(v))merge(u,v,w^1);else if(d[u]^d[v]^w^1)flg=true;
}if(flg){puts("0");continue;}m=0;for(R i=1;i<=n;++i)if(fa[i]==i)++m;printf("%d\n",qpow(2,m-1));
}
}
T3 0pts
硬刚t3无果。
线段树优化建图。
网上的std有错,没有判掉在子树外的点。
连边时 \(s2\) 先连到一个点,另一个点再连到 \(s1\) .
#include<bits/stdc++.h>
#define R register int
#define ll long long
using namespace std;
namespace Luitaryi {
char BB[1<<15],*S=BB,*T=BB;
#define getchar() (S==T&&(T=(S=BB)+fread(BB,1,1<<15,stdin),S==T)?EOF:*S++)
inline ll g() { register ll x=0,f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*f;
} const int N=100010,B=17,Y=20,F=5;
int n,m,cnt,tot,rt[2],t,W;
int vr[Y*N],nxt[Y*N],fir[F*N],rw[N],dfn[N],sz[N],w[Y*N],fa[N][B+1];
int ls[F*N],rs[F*N]; bool vis[F*N]; ll d[F*N];
struct node {int l,r; node() {} node(int _l,int _r) {l=_l,r=_r;}
inline bool operator < (const node& that) const
{return l<that.l||l==that.l&&r<that.r;}
}mem[N];
inline void dfs(int u) { dfn[u]=++tot,rw[tot]=u; sz[u]=1;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(dfn[v]) continue; d[v]=d[u]+1,fa[v][0]=u;
dfs(v); sz[u]+=sz[v];
}
}
inline void add(int u,int v,int ww)
{vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt,w[cnt]=ww;}
inline void build(int& tr,int l,int r,int op) {
if(l==r) return void(tr=rw[l]);
if(!tr) tr=++tot; R md=l+r>>1;
build(ls[tr],l,md,op),build(rs[tr],md+1,r,op);
(op)?(add(ls[tr],tr,0)):(add(tr,ls[tr],0));
(op)?(add(rs[tr],tr,0)):(add(tr,rs[tr],0));
}
inline void change(int tr,int l,int r,int LL,int RR,int op) {
if(LL<=l&&r<=RR) return void((op)?add(tot,tr,W):add(tr,tot,0));
R md=l+r>>1; if(LL<=md) change(ls[tr],l,md,LL,RR,op);
if(RR>md) change(rs[tr],md+1,r,LL,RR,op);
}
inline int calc(int u,int v)
{for(R t=B;~t;--t) if(d[fa[u][t]]>d[v]) u=fa[u][t]; return u;}
inline void dijk() { memset(d,0x3f,sizeof d);
priority_queue<pair<ll,int> > q; d[1]=0; q.push(make_pair(0,1));
while(q.size()) { R u=q.top().second; q.pop();
if(vis[u]) continue; vis[u]=true;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(d[v]>d[u]+w[i]) d[v]=d[u]+w[i],q.push(make_pair(-d[v],v));
}
}
}
inline void main() {
g(); n=g(),m=g(); for(R i=1,u,v,w;i<n;++i)
u=g(),v=g(),w=g(),add(u,v,w),add(v,u,w);
d[1]=1,dfs(1); for(R t=1;t<=B;++t) for(R i=1;i<=n;++i)
fa[i][t]=fa[fa[i][t-1]][t-1];
build(rt[0],1,n,0),build(rt[1],1,n,1);
R x1,k1,x2,k2,LL,RR,p;
for(R i=1;i<=m;++i) {
x1=g(),k1=g(),LL=1,RR=n,t=0; ++tot;
if(~k1) { p=0;
for(R i=1,u;i<=k1;++i) { u=g();
if(dfn[u]<=dfn[x1]&&dfn[x1]+sz[x1]-1<=dfn[u]+sz[u]-1)
d[u]>d[p]?p=u:0;
else mem[++t]=node(dfn[u],dfn[u]+sz[u]-1);
} sort(mem+1,mem+t+1); p=calc(x1,p);
LL=dfn[p],RR=dfn[p]+sz[p]-1;
for(R i=1;i<=t;++i) {
if(!(dfn[p]<=mem[i].l&&mem[i].r<=RR)) continue;
if(LL<mem[i].l) change(rt[1],1,n,LL,mem[i].l-1,0);
LL=max(LL,mem[i].r+1);
} if(LL<=RR) change(rt[1],1,n,LL,RR,0);
} else add(x1,tot,0);
x2=g(),k2=g(),LL=1,RR=n,t=0;
if(~k2) { p=0;
for(R i=1,u;i<=k2;++i) { u=g();
if(dfn[u]<=dfn[x2]&&dfn[x2]+sz[x2]-1<=dfn[u]+sz[u]-1)
d[u]>d[p]?p=u:0;
else mem[++t]=node(dfn[u],dfn[u]+sz[u]-1);
} sort(mem+1,mem+t+1); p=calc(x2,p);
W=g(); LL=dfn[p],RR=dfn[p]+sz[p]-1;
for(R i=1;i<=t;++i) {
if(!(dfn[p]<=mem[i].l&&mem[i].r<=RR)) continue;
if(LL<mem[i].l) change(rt[0],1,n,LL,mem[i].l-1,1);
LL=max(LL,mem[i].r+1);
} if(LL<=RR) change(rt[0],1,n,LL,RR,1);
} else W=g(),add(tot,x2,W);
} dijk(); for(R i=1;i<=n;++i) printf("%lld\n",d[i]);
}
} signed main() {Luitaryi::main(); return 0;}
错误
原文地址:https://www.cnblogs.com/Jackpei/p/11688746.html
- Java并发学习之玩转线程池
- Java & PhantomJs 实现html输出图片
- 干货 | React Native实践之携程Moles框架
- Java并发学习之ThreadLocal使用及原理介绍
- ibeacon蓝牙技术简介
- Java并发学习之定时任务的几种玩法
- [视频直播]本周日先行者视频“React多级菜单
- Java并发学习之线程状态及Thread常用方法详解
- Java并发学习之四种线程创建方式的实现与对比
- Google protocol buffer简介
- Java反射的使用姿势一览
- [一对一讲什么] 之 测完了接口、搞好了目录,然后做啥?
- Java容器篇小结之List自问自答
- android断点下载
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 网络工程师提高篇 | 路由重发布你了解多少?从原理到配置,瑞哥带你学习一波!
- Python 为什么不支持 switch 语句?
- 2019河南科技学院发现杯
- 排序算法之希尔排序
- 排序算法之快速排序
- 干货 | Oracle数据库操作命令大全,满满的案例供你理解,收藏!
- 【2万字长文】深入浅出主流的几款小程序跨端框架原理
- 关于动态规划的练习题
- Linux笔记
- 使用OpenCV和Python计算视频中的总帧数
- HDOJ 1087 (JAVA实现 最大上升子序列和dp)
- JavaSE笔记
- [译]Gas 优化 - 如何优化存储
- Codeforces Round #613 (Div. 2) C. Fadi and LCM
- N皇后问题(DFS)