bzoj千题计划223:bzoj2816: [ZJOI2012]网络
http://www.lydsy.com/JudgeOnline/problem.php?id=2816
每种颜色搞一个LCT
判断u v之间有边直接相连:
如果u和v之间有边相连,那么他们的深度相差1
所以
make_root(u);
access(v);
splay(v);
判断u的父亲是不是v 以及 u是不是没有右儿子
- #include<cstdio>
- #include<iostream>
- using namespace std;
- #define N 10001
- void read(int &x)
- {
- x=; char c=getchar();
- while(!isdigit(c)) c=getchar();
- while(isdigit(c)) { x=x*+c-''; c=getchar(); }
- }
- struct LCT
- {
- int ch[N][],fa[N];
- int key[N],mx[N];
- int d[N];
- bool rev[N];
- int st[N],top;
- void update(int x)
- {
- mx[x]=key[x];
- mx[x]=max(mx[x],mx[ch[x][]]);
- mx[x]=max(mx[x],mx[ch[x][]]);
- }
- void down(int x)
- {
- if(rev[x])
- {
- rev[x]^=;
- swap(ch[x][],ch[x][]);
- rev[ch[x][]]^=;
- rev[ch[x][]]^=;
- }
- }
- bool getson(int x)
- {
- return ch[fa[x]][]==x;
- }
- bool isroot(int x)
- {
- return ch[fa[x]][]!=x && ch[fa[x]][]!=x;
- }
- void rotate(int x)
- {
- int y=fa[x],z=fa[y];
- bool k=ch[y][]==x;
- if(!isroot(y)) ch[z][ch[z][]==y]=x;
- ch[y][k]=ch[x][k^]; ch[x][k^]=y;
- fa[y]=x; fa[x]=z; fa[ch[y][k]]=y;
- update(y);
- }
- void splay(int x)
- {
- st[top=]=x;
- for(int i=x;!isroot(i);i=fa[i])
- st[++top]=fa[i];
- for(int i=top;i;--i) down(st[i]);
- int y;
- while(!isroot(x))
- {
- y=fa[x];
- if(!isroot(y)) rotate(getson(x)==getson(y) ? y : x);
- rotate(x);
- }
- update(x);
- }
- void access(int x)
- {
- int t=;
- while(x)
- {
- splay(x);
- ch[x][]=t;
- update(x);
- t=x; x=fa[x];
- }
- }
- void make_root(int x)
- {
- access(x);
- splay(x);
- rev[x]^=;
- }
- void link(int x,int y)
- {
- make_root(x);
- fa[x]=y;
- d[x]++; d[y]++;
- splay(x);
- }
- void cut(int x,int y)
- {
- make_root(x);
- access(y);
- splay(y);
- ch[y][]=fa[x]=;
- update(y);
- d[x]--; d[y]--;
- }
- int findroot(int x)
- {
- access(x);
- splay(x);
- while(ch[x][]) x=ch[x][];
- return x;
- }
- bool query(int x,int y)
- {
- int a=findroot(x);
- int b=findroot(y);
- return a==b;
- }
- bool query_edge(int u,int v)
- {
- make_root(u);
- access(v);
- splay(v);
- return fa[u]==v && !ch[u][];
- }
- }Lct[];
- int main()
- {
- freopen("networkzj.in","r",stdin);
- freopen("networkzj.out","w",stdout);
- int n,m,c,q;
- read(n); read(m); read(c); read(q);
- int u,v,w,k;
- for(int i=;i<=n;++i)
- {
- read(w);
- for(int j=;j<c;++j) Lct[j].key[i]=Lct[j].key[i]=w;
- }
- while(m--)
- {
- read(u); read(v); read(w);
- Lct[w].link(u,v);
- }
- while(q--)
- {
- read(k);
- if(!k)
- {
- read(u); read(w);
- for(int i=;i<c;++i)
- {
- Lct[i].make_root(u);
- Lct[i].key[u]=w;
- Lct[i].update(u);
- }
- }
- else if(k==)
- {
- read(u); read(v); read(w);
- int i;
- for(i=;i<c;++i)
- if(Lct[i].query_edge(u,v) ) break;
- if(i==c) { puts("No such edge."); continue; }
- if(i==w) { puts("Success."); continue; }
- if(Lct[w].d[u]== || Lct[w].d[v]==) { puts("Error 1."); continue; }
- if(Lct[w].query(u,v)) { puts("Error 2."); continue; }
- Lct[i].cut(u,v);
- Lct[w].link(u,v);
- puts("Success.");
- }
- else
- {
- read(w); read(u); read(v);
- if(!Lct[w].query(u,v)) { puts("-1"); continue; }
- Lct[w].make_root(u);
- Lct[w].access(v);
- Lct[w].splay(v);
- cout<<Lct[w].mx[v]<<'\n';
- }
- }
- }
bzoj千题计划223:bzoj2816: [ZJOI2012]网络的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划136:bzoj3931: [CQOI2015]网络吞吐量
http://www.lydsy.com/JudgeOnline/problem.php?id=3931 在最短路网络上跑最大流 #include<queue> #include<c ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划192:bzoj1569: [JSOI2008]Blue Mary的职员分配
http://www.lydsy.com/JudgeOnline/problem.php?id=1569 dp[i][j][a][b] 表示i个职员,发广告状态为j,已有金钱a,声誉b的最少天数 j= ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
随机推荐
- 6、Docker图形化管理(Portainer)
一.Portainer简介 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控 ...
- 设计模式 笔记 命令模式 Command
//---------------------------15/04/25---------------------------- //Conmmand 命令模式----对象行为型模式 /* 1:意 ...
- 代理神器allproxy
背景 allproxy意为all as proxy,即是说所有设备均可以成为一个网络代理,唯一的要求就是有网络访问权限. 一般的代理软件要求宿主机必须有公网地址,然后才能把网络代理出去,但在实际情况下 ...
- 【读书笔记】Linux内核设计与实现(第五章)
5.1 内核通信 系统调用在用户空间和硬件设备之间添加了一个中间层. 该层主要作用: 1.为用户空间提供了一种硬件的抽象接口. 2.保证了系统的稳定和安全. 3.每个进程都运行在虚拟系统中. 在Lin ...
- 20135337朱荟潼 Linux第七周学习总结——可执行程序的装载
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 Linu ...
- Alpha 冲刺报告模板
Alpha 冲刺报告模板 Deadline: 十分钟左右站立会议,控制好时间,不要在此会议上讨论细节问题. 每组一份博客,组内共享,每人都需提交. 模板 队名:xxx 组员1(组长) 今天完成了哪些任 ...
- [2017BUAA软工]个人阅读作业+总结
阅读作业 没有银弹 No Silver Bullet - Essence and Accidents of Software Engineering - Brooks 在这篇论文中,作者阐述了软件的四 ...
- OneZero第二周第五次站立会议(2016.4.1)
会议时间:2016年4月1日 会议成员:冉华,张敏,夏一鸣.(王请假). 会议目的:汇报前一天工作,会议成员评论. 会议内容: 1.前端,由夏,张负责汇报,完成前端功能,待命. 2.数据逻辑控制,由王 ...
- 通过动态包含和Ajax机制抽取Web应用的公共页面
在Java Web应用开发中,经常遇到的一种情况是,许多的页面中都包含着“公共页面”,这部分动态页面的特征是:访问量大,会带来较大的性能压力.功能设计上会动态地改变自身的元素.比如在登录前和登录后所展 ...
- bzoj5301[CQOI2018]异或序列
题意 已知一个长度为 n 的整数数列 a[1],a[2],-,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子 序列满足异或和等于 k . 也就是说,对于所有的 x,y (l ...