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 ...
随机推荐
- 《深入浅出NodeJS》mindmap
接触NodeJS有快两年了,但因为和我的工作内容关系不大,所以一直没有系统的学习.最近终于有空能系统地了解学习一下这门技术,于是买了一本朴灵老师的<深入浅出NodeJS>仔细研读.这本书内 ...
- 虚拟机console基础环境部署——安全加固
1. 概述 安全是一个重要的课题.广义上可以总结为: 主机安全 网络安全 信息安全 数据安全 虽然console已经是最小化安装,但是这并不能说明console就已经安全了.之前的博客对console ...
- 【DDD】业务建模实践 —— 发布帖子
本文是基于上一篇‘业务建模战术’的实践,主要讲解‘发表帖子’场景的业务建模,包括:业务建模.业务模型.示例代码:示例代码会使用java编写,文末附有github地址.相比于<领域驱动设计> ...
- Python3.7 + jupyter安装(CentOS6.5)
Python3.7 + jupyter安装(CentOS6.5) 方法一(anaconda): anaconda是一个开源的Python发行版本 包含conda,python等大量的科学包以及依赖 优 ...
- FFMpeg笔记(六) 滤镜命名规则及使用libavfilter对视频尺寸进行裁切
在ffmpeg框架中,滤镜(filter)功能通过libavfilter库实现. 一个filter可以同时有多个输入和输出.以图为例: 图中的一系列操作共使用了四个filter,分别是 spli ...
- 网易云易盾朱星星:最容易被驳回的10大APP过检项
本文由 网易云发布. 1月20日,“走进网易:移动测试与安全实践”公开活动在杭州西湖区颐高创业大厦4F楼友会创业咖啡厅举行.本次活动的议题聚焦在如何实现应用的高效开发.安全过检.开发功耗降到最低等热 ...
- 绕过用编码方式阻止XSS攻击的几个例子
阻止攻击的常用方法是:在将HTML返回给Web浏览器之前,对攻击者输入的HTML进行编码.HTML编码使用一些没有特定HTML意义的字符来代替那些标记字符(如尖括号).这些替代字符不会影响文本在web ...
- git初次推送
第一次配置Git git config --global user.name "xxxx" git config --global user.email "xxxx@xx ...
- PAT甲题题解-1025. PAT Ranking (25)-排序
排序,求整体的排名和局部的排名整体排序,for循环一遍同时存储整体目前的排名和所在局部的排名即可 #include <iostream> #include <cstdio> # ...
- 实验---反汇编一个简单的C程序(杨光)
反汇编一个简单的C程序 攥写人:杨光 学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163 ...