BZOJ传送门

洛咕传送门

tmtmtm注意最后要加一个“...”
没注意就奇怪的挂了……

发现C&lt;10C&lt;10C<10,直接对于每一个颜色暴力维护一颗LCTLCTLCT就可以了

判断的话应该比较简单,反正连边个人喜欢用一个mapmapmap来记录
注意queryqueryquery及时下传信息否则会出错

#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline int read(){char ch=getchar();int res=0,f=1;while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=getchar();return res*f;
}
const int N=100005;
int n,m,C,K,a[N];
#define lc(u) son[u][0]
#define rc(u) son[u][1]
inline void chemx(int &a,int b){a=(a>b)?a:b;
}
struct Lct{int q[N],son[N][2],mx[N],fa[N],rev[N];inline bool isrc(int u){return rc(fa[u])==u;}inline bool isrt(int u){if(!fa[u])return 1;return lc(fa[u])!=u&&rc(fa[u])!=u;}inline void pushup(int u){mx[u]=a[u];if(lc(u))chemx(mx[u],mx[lc(u)]);if(rc(u))chemx(mx[u],mx[rc(u)]);}inline void pushdown(int u){if(!rev[u])return;swap(lc(u),rc(u));     if(lc(u))rev[lc(u)]^=1;if(rc(u))rev[rc(u)]^=1;rev[u]=0;}inline void rotate(int v){int u=fa[v],z=fa[u];int t=rc(u)==v;if(!isrt(u))son[z][rc(z)==u]=v;fa[v]=z;son[u][t]=son[v][t^1],fa[son[v][t^1]]=u;      son[v][t^1]=u,fa[u]=v;pushup(u),pushup(v);}inline void splay(int u){q[q[0]=1]=u;for(int v=u;!isrt(v);v=fa[v])q[++q[0]]=fa[v];for(int i=q[0];i;i--)pushdown(q[i]);while(!isrt(u)){if(!isrt(fa[u])){if(isrc(u)==isrc(fa[u]))rotate(fa[u]);else rotate(u);}rotate(u);}pushup(u);}inline void access(int u){for(int v=0;u;v=u,u=fa[u]){splay(u),rc(u)=v;if(v)fa[v]=u;pushup(u);}}inline int findrt(int u){access(u),splay(u);while(pushdown(u),lc(u))u=lc(u);splay(u);return u;}inline void makert(int u){access(u);splay(u);rev[u]^=1;}inline void link(int u,int v){makert(u);if(findrt(v)!=u)fa[u]=v;}inline void cut(int u,int v){makert(u),access(v),splay(v);lc(v)=fa[u]=0,pushup(v);}inline void split(int u,int v){makert(u),access(v),splay(v);}inline int query(int u,int v){if(findrt(u)!=findrt(v))return -1;       split(u,v);return mx[v];}
}T[10];
int c[10][N];
#define pii pair<int,int>
#define mp make_pair
map<pii,int> p;
int main(){n=read(),m=read(),C=read(),K=read();for(int i=1;i<=n;i++){a[i]=read();for(int j=0;j<C;j++)T[j].mx[i]=a[i];}for(int i=1;i<=m;i++){int u=read(),v=read(),w=read();c[w][u]++,c[w][v]++;T[w].link(u,v),p[mp(u,v)]=w+1;}for(int i=1;i<=K;i++){int op=read();if(op==0){int u=read(),k=read();for(int i=0;i<C;i++){T[i].makert(u),a[u]=k;T[i].pushup(u);}}else if(op==1){int u=read(),v=read(),w=read(),pre,k;if(!p[mp(u,v)]&&!p[mp(v,u)]){puts("No such edge.");continue;}if((p[mp(u,v)]&&p[mp(u,v)]==w+1)||(p[mp(v,u)]&&p[mp(v,u)]==w+1)){puts("Success.");continue;}if(p[mp(u,v)])pre=p[mp(u,v)]-1,k=1;else pre=p[mp(v,u)]-1,k=2;if(c[w][u]>=2||c[w][v]>=2){puts("Error 1.");continue;}if(T[w].findrt(v)==T[w].findrt(u)){puts("Error 2.");continue;}c[pre][u]--,c[pre][v]--,T[pre].cut(u,v);if(k==1)p[mp(u,v)]=w+1;else p[mp(v,u)]=w+1;c[w][u]++,c[w][v]++,T[w].link(u,v);puts("Success.");}else{int k=read(),u=read(),v=read();cout<<T[k].query(u,v)<<'\n';}}
}

转载于:https://www.cnblogs.com/stargazer-cyk/p/11145603.html

【BZOJ2816】【洛谷】【ZJOI2012】—网络(LCT)相关推荐

  1. sscanf小技巧-洛谷P7911 网络连接

    sscanf小技巧-洛谷P7911 网络连接 序言 本题解来源:本蒟蒻上课摸鱼 (别学我) 最近学了一个挺好用的函数--sscanf(),结合洛谷P7911 网络连接讲一下. (点击查看题目) 推荐几 ...

  2. 洛谷P3376 网络最大流

    不是讲网络流,就是存个板子 另外我的Dinic跑得比EK慢一倍可还行( 附两份比较好的教程,均来自洛谷日报 EK\sf \color{blue}EKEK Dinic\sf \color{blue}Di ...

  3. BZOJ2816:[ZJOI2012]网络(LCT)

    Description 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构 ...

  4. [ZJOI2018]历史,洛谷P4338,类LCT维护

    正题 题目大意,大致就是给出一棵有根数,给出每个点access的次数,要你安排顺序,求轻重边切换最多多少次,动态加次数. 第一步其实还挺好想的,思考一下如何静态做,发现相当于对于每一个节点,就是让各个 ...

  5. 洛谷3376 网络最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...

  6. 洛谷3171 网络吞吐量(网络流)

    t开成n结果cur赋值的时候也只赋值到t令人智熄 [题目分析] 好吧我承认这个错误真的呵呵........ 题目有那~~~~~么长,然后画画图这道题就基本看出正解了,再一看数据范围,n<=500 ...

  7. BZOJ2816: [ZJOI2012]网络

    BZOJ2816: [ZJOI2012]网络 BZOJ题面. 题目描述 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条 ...

  8. 洛谷.4172.[WC2006]水管局长(LCT Kruskal)

    题目链接 洛谷(COGS上也有) 不想去做加强版了..(其实处理一下矩阵就好了) 题意: 有一张图,求一条x->y的路径,使得路径上最长边尽量短并输出它的长度.会有<=5000次删边. 这 ...

  9. 缩点【洛谷P1262】 间谍网络

    [洛谷P1262] 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他 ...

  10. 洛谷P1262 间谍网络题解

    洛谷P1262 间谍网络题解 题目大意 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果 A 间谍手中掌握着关于 B 间谍的犯罪证据,则称 A 可以揭发 B.有些间谍收受贿赂,只要 ...

最新文章

  1. Ubuntu9.10 server 安装配置 vsftpd2.2.0 ftp服务器 并且 解决 putty 登陆 sshd 显示中文乱码
  2. Python之pyspark:pyspark的简介、安装、使用方法之详细攻略
  3. 微信公众号Java开发-笔记02【开发接入准备、开发接入】
  4. Android中JNI的使用方法
  5. 7种可能会导致内存泄漏的场景!
  6. python3 上传文件到目标机器_Python3 +服务器搭建私人云盘,再也不怕限速了
  7. php封装redis类,php封装redis操作类
  8. 安卓10侧边返回_Flyme 8 体验:可能是最好的国产安卓系统
  9. ejb stateless 包含在哪个包_微信评论能发表情包的那三天,今年最火表情包已有定论?!...
  10. Java字符串contains()
  11. php李炎恢笔记,李炎恢PHP笔记2
  12. 龙芯3a4000 交叉编译链接错误
  13. 推荐几个值得关注的微信公众号
  14. 浏览器打开html不加载css样式,ie怎么加载不了css样式?
  15. 约瑟夫问题(丢手绢问题)
  16. 如何读懂python代码_教你如何阅读 Python 开源项目代码
  17. react-native打包release版本闪退
  18. css动画结束闪烁,CSS秘密花园: 闪烁动画
  19. 震撼,愿所有中国人,都能听到这篇演讲!
  20. Android MMS APN工作原理以及PDP知识摘要

热门文章

  1. 计算机专业外语的特点,计算机专业英语在邮政信息技术领域的应用特点|计算机专业哪个好...
  2. 实现二叉树的遍历(递归与非递归)
  3. Leetcode 刷题笔记(二十二) ——贪心算法篇之进阶题目
  4. 链表一:从尾到头打印链表
  5. numpy 中的nan和常用的统计方法
  6. NIUDAY 七牛美图 AI 共享日 | 大咖云集 邀您共同探索各场景下的 AI 应用与落地...
  7. 性能测试二八原则,响应时间2/5/8原则
  8. uwp之拍照(使用后置摄像头)
  9. 样式化加载失败的图片
  10. apache的开源项目-模板引擎(Velocity)(转)