Description

http://www.lydsy.com/JudgeOnline/upload/zjoi2012.pdf

正解:$link-cut \ tree$。

$LCT$板子题,直接维护$10$个$LCT$就行了。

注意修改颜色操作,修改后的颜色可能与之前颜色相同。

  1. #include <bits/stdc++.h>
  2. #define il inline
  3. #define RG register
  4. #define ll long long
  5. #define N (10005)
  6.  
  7. using namespace std;
  8.  
  9. map<int,int> mp[N];
  10.  
  11. int d[N][],val[N],n,m,c,Q;
  12.  
  13. il int gi(){
  14. RG int x=,q=; RG char ch=getchar();
  15. while ((ch<'' || ch>'') && ch!='-') ch=getchar();
  16. if (ch=='-') q=-,ch=getchar();
  17. while (ch>='' && ch<='') x=x*+ch-,ch=getchar();
  18. return q*x;
  19. }
  20.  
  21. struct Link_Cut_Tree{
  22.  
  23. int ch[N][],fa[N],sum[N],rev[N],st[N];
  24.  
  25. il int isroot(RG int x){
  26. return ch[fa[x]][]!=x && ch[fa[x]][]!=x;
  27. }
  28.  
  29. il void pushup(RG int x){
  30. sum[x]=max(val[x],max(sum[ch[x][]],sum[ch[x][]])); return;
  31. }
  32.  
  33. il void pushdown(RG int x){
  34. rev[ch[x][]]^=,rev[ch[x][]]^=;
  35. swap(ch[x][],ch[x][]),rev[x]=; return;
  36. }
  37.  
  38. il void rotate(RG int x){
  39. RG int y=fa[x],z=fa[y],k=ch[y][]==x;
  40. if (!isroot(y)) ch[z][ch[z][]==y]=x;
  41. fa[x]=z,ch[y][k^]=ch[x][k],fa[ch[x][k]]=y;
  42. ch[x][k]=y,fa[y]=x,pushup(y),pushup(x); return;
  43. }
  44.  
  45. il void splay(RG int x){
  46. RG int top=; st[++top]=x;
  47. for (RG int i=x;!isroot(i);i=fa[i]) st[++top]=fa[i];
  48. for (RG int i=top;i;--i) if (rev[st[i]]) pushdown(st[i]);
  49. while (!isroot(x)){
  50. RG int y=fa[x],z=fa[y];
  51. if (!isroot(y)) rotate((ch[z][]==y)^(ch[y][]==x)?x:y);
  52. rotate(x);
  53. }
  54. return;
  55. }
  56.  
  57. il void access(RG int x){
  58. RG int t=;
  59. while (x){
  60. splay(x),ch[x][]=t;
  61. pushup(x),t=x,x=fa[x];
  62. }
  63. return;
  64. }
  65.  
  66. il void makeroot(RG int x){
  67. access(x),splay(x),rev[x]^=; return;
  68. }
  69.  
  70. il void link(RG int x,RG int y){
  71. makeroot(x),fa[x]=y; return;
  72. }
  73.  
  74. il void cut(RG int x,RG int y){
  75. makeroot(x),access(y),splay(y);
  76. ch[y][]=fa[x]=,pushup(y); return;
  77. }
  78.  
  79. il int query(RG int x,RG int y){
  80. makeroot(x),access(y),splay(y); return sum[y];
  81. }
  82.  
  83. il int find(RG int x){
  84. access(x),splay(x);
  85. while (ch[x][]) x=ch[x][]; return x;
  86. }
  87.  
  88. }G[];
  89.  
  90. int main(){
  91. #ifndef ONLINE_JUDGE
  92. freopen("network.in","r",stdin);
  93. freopen("network.out","w",stdout);
  94. #endif
  95. n=gi(),m=gi(),c=gi(),Q=gi();
  96. for (RG int i=;i<=n;++i) val[i]=gi();
  97. for (RG int i=,u,v,w;i<=m;++i){
  98. u=gi(),v=gi(),w=gi(); if (u>v) swap(u,v);
  99. G[w].link(u,v),mp[u][v]=w,++d[u][w],++d[v][w];
  100. }
  101. while (Q--){
  102. RG int op=gi();
  103. if (!op){
  104. RG int x=gi(),y=gi();
  105. for (RG int i=;i<c;++i) G[i].splay(x); val[x]=y;
  106. for (RG int i=;i<c;++i) G[i].pushup(x);
  107. } else if (op==){
  108. RG int u=gi(),v=gi(),w=gi(),k; if (u>v) swap(u,v);
  109. if (!mp[u].count(v)){ puts("No such edge."); continue; } k=mp[u][v];
  110. if (k!=w && (d[u][w]>= || d[v][w]>=)) puts("Error 1.");
  111. else if (k!=w && G[w].find(u)==G[w].find(v)) puts("Error 2."); else{
  112. RG int k=mp[u][v]; --d[u][k],--d[v][k],++d[u][w],++d[v][w];
  113. G[k].cut(u,v),G[w].link(u,v),mp[u][v]=w,puts("Success.");
  114. }
  115. } else{
  116. RG int w=gi(),u=gi(),v=gi();
  117. if (G[w].find(u)!=G[w].find(v)) puts("-1");
  118. else printf("%d\n",G[w].query(u,v));
  119. }
  120. }
  121. return ;
  122. }

bzoj2816 [ZJOI2012]网络的更多相关文章

  1. bzoj千题计划223:bzoj2816: [ZJOI2012]网络

    http://www.lydsy.com/JudgeOnline/problem.php?id=2816 每种颜色搞一个LCT 判断u v之间有边直接相连: 如果u和v之间有边相连,那么他们的深度相差 ...

  2. [bzoj2816][ZJOI2012]网络(LCT,splay)

    传送门 题解 话说以前还真没见过用LCT只维护一条链的……好像除了树点涂色那题…… 先看一下题目规定的两个性质 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜 ...

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

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

  4. 洛谷 P2173 [ZJOI2012]网络 解题报告

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

  5. BZOJ2816:[ZJOI2012]网络——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2816 https://www.luogu.org/problemnew/show/P2173 有一 ...

  6. bzoj 2816: [ZJOI2012]网络 (LCT 建多棵树)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2816 题面: http://www.lydsy.com/JudgeOnline/upload ...

  7. 【刷题】BZOJ 2816 [ZJOI2012]网络

    Description http://www.lydsy.com/JudgeOnline/upload/zjoi2012.pdf Solution 维护树上联通块的信息,支持动态加边删边 LCT 总共 ...

  8. bzoj 2816: [ZJOI2012]网络(splay)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2816 [题意] 给定一个无向图,满足条件:从一个节点出发的同色边不超过2条,且不存在同 ...

  9. [ZJOI2012]网络

    嘟嘟嘟 今天复习lct,趁着还年轻多写点数据结构. 首先不得不吐槽一下,题面好长啊-- 通过观察发现,\(c \leqslant 10\).那么就可以暴力的建10棵lct. 接下来说下具体做法: 1. ...

随机推荐

  1. Struts2 入门介绍(一)

    一.什么是Struts2 1.Struts2是一个开发框架,应用于JavaEE三层架构中的web层. 2.Struts2框架是在Struts1和webwork基础上发展的一个全新的框架. 3.Stru ...

  2. Spark Streaming初探

    1.  介绍 Spark Streaming是Spark生态系统中一个重要的框架,建立在Spark Core之上,与Spark SQL.GraphX.MLib相并列. Spark Streaming是 ...

  3. 改善Java程序的151个建议(1-4)

    1.不要在常量和变量中出现易混淆的数字 个人感觉这条在于编程命名的规范性.代码除了给机器看,也要给人看.要写能够结构清晰,命名规范,让人看懂的代码. 字母l作为长整型标志时务必大写 L 2.莫让常量蜕 ...

  4. Java 8 读取文件

    以前的Java版本中读取文件非常繁琐,现在比较简单.使用Java8的Files以及Lambda,几句代码就可以搞定. public static String getXml() { StringBuf ...

  5. VUE的两种跳转push和replace对比区别

    router.push(location) 在vue.js中想要跳转到不同的 URL,需要使用 router.push 方法. 这个方法会向 history 栈添加一个新的记录,当用户点击浏览器后退按 ...

  6. css以前忽略的一些知识点(知识体系搭建)

    一.选择器 基本选择器: 通用元素选择器 标签选择器 类选择器 id选择器 组合选择器: 多元素组合选择器 后代元素选择器 子代元素选择器 毗邻元素选择器 属性选择器: [title] & P ...

  7. canvas image array(canvas图片阵列)

    code:   <!DOCTYPE html> <html> <head>  <title>hehe</title>  </head& ...

  8. Scrapy爬虫requests

    requests 模块 模块的由来: 浏览器可以浏览网站, 是由于浏览器发送了requests , 各种请求.打开一个网站可能有几十到几百个请求. 从而服务器端会反馈各种因应不同请求生成的数据. 我们 ...

  9. 优秀iOS文章集合

    Runtime 10种用法(没有比这更全的了成为iOS顶尖高手,你必须来这里(这里有最好的开源项目和文章)iOS逆向Reveal查看任意app 的界面JSPatch (实时修复App Store bu ...

  10. 医药箱APP静态小项目

    花费了10天时间,纯手写一个医药箱APP静态小项目,里面有上拉加载.左右滑动.弹出层淡入淡出等效果,主要是练习. 以下是一部分页面效果图: 我用的是谷歌的开发者工具的手机端模拟器. 里面需要优化的地方 ...