题面

初见LCT,动态最小生成树+链上查询max,具体做法是把边转换成点(LCT只能维护点)

时光倒流,先把最后剩的连起来。然后查询就看链上最大值,修改看看链上最大值是否大于当前边,如果是就断开原来的改成当前边

  1. #include<map>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=;
  7. struct a{int x,y,c;}mst[N];
  8. struct b{int x,y,typ;}qry[N];
  9. map<pair<int,int>,int> mmp;
  10. int fth[N],son[N][],val[N];
  11. int maxx[N],stk[N],outp[N];
  12. bool brk[N],rev[N];
  13. int n,m,T,p,t1,t2,cnt,top;
  14. bool cmp(a xx,a yy)
  15. {
  16. return xx.c<yy.c;
  17. }
  18. void Pushup(int nde)
  19. {
  20. maxx[nde]=val[nde];
  21. int &mx=maxx[nde],&mx1=maxx[son[nde][]],&mx2=maxx[son[nde][]];
  22. if(mst[mx1].c>mst[mx].c) mx=mx1; if(mst[mx2].c>mst[mx].c) mx=mx2;
  23. }
  24. void Release(int nde)
  25. {
  26. if(rev[nde])
  27. {
  28. int &lson=son[nde][],&rson=son[nde][];
  29. rev[lson]^=,rev[rson]^=,rev[nde]^=;
  30. swap(lson,rson);
  31. }
  32. }
  33. bool Nottop(int nde)
  34. {
  35. int fa=fth[nde];
  36. return son[fa][]==nde||son[fa][]==nde;
  37. }
  38. void Rotate(int nde)
  39. {
  40. int fa=fth[nde],gr=fth[fa],isl=nde==son[fa][];
  41. if(Nottop(fa)) son[gr][son[gr][]==fa]=nde;
  42. fth[nde]=gr,fth[fa]=nde,fth[son[nde][isl]]=fa;
  43. son[fa][isl^]=son[nde][isl],son[nde][isl]=fa;
  44. Pushup(fa),Pushup(nde);
  45. }
  46. void Splay(int nde)
  47. {
  48. stk[top=]=nde;
  49. for(int i=nde;Nottop(i);i=fth[i])
  50. stk[++top]=fth[i];
  51. while(top) Release(stk[top--]);
  52. while(Nottop(nde))
  53. {
  54. int fa=fth[nde],gr=fth[fa];
  55. if(Nottop(fa))
  56. Rotate(((son[fa][]==nde)==(son[gr][]==fa))?fa:nde);
  57. Rotate(nde);
  58. }
  59. }
  60. void Access(int nde)
  61. {
  62. int lst=,mem=nde;
  63. while(nde)
  64. {
  65. Splay(nde),son[nde][]=lst;
  66. Pushup(nde),lst=nde,nde=fth[nde];
  67. }
  68. Splay(mem);
  69. }
  70. void Turnroot(int nde)
  71. {
  72. Access(nde),rev[nde]^=;
  73. }
  74. int Getroot(int nde)
  75. {
  76. Access(nde);
  77. while(son[nde][])
  78. nde=son[nde][];
  79. return nde;
  80. }
  81. void Split(int x,int y)
  82. {
  83. Turnroot(x),Access(y);
  84. }
  85. int Query(int x,int y)
  86. {
  87. Split(x,y);
  88. return maxx[y];
  89. }
  90. void Link(int x,int y)
  91. {
  92. Turnroot(x);
  93. if(Getroot(y)!=x) fth[x]=y;
  94. }
  95. void Cut(int x,int y)
  96. {
  97. Turnroot(x);
  98. if(Getroot(y)==x&&fth[x]==y&&!son[x][])
  99. son[y][]=fth[x]=;
  100. }
  101. int main()
  102. {
  103. scanf("%d%d%d",&n,&m,&T);
  104. for(int i=;i<=m;i++)
  105. {
  106. scanf("%d%d%d",&t1,&t2,&mst[i].c);
  107. if(t1>t2) swap(t1,t2); mst[i].x=t1,mst[i].y=t2;
  108. }
  109. sort(mst+,mst++m,cmp);
  110. for(int i=;i<=m;i++)
  111. mmp[make_pair(mst[i].x,mst[i].y)]=i;
  112. for(int i=;i<=T;i++)
  113. {
  114. scanf("%d%d%d",&qry[i].typ,&t1,&t2);
  115. if(t1>t2) swap(t1,t2); qry[i].x=t1,qry[i].y=t2;
  116. if(qry[i].typ==) brk[mmp[make_pair(t1,t2)]]=true;
  117. }
  118. for(int i=;i<=m;i++)
  119. val[i+n]=maxx[i+n]=i;
  120. for(int i=;i<=m&&cnt<n-;i++)
  121. if(!brk[i])
  122. {
  123. int tx=mst[i].x,ty=mst[i].y;
  124. Turnroot(tx);
  125. if(Getroot(ty)!=tx)
  126. cnt++,Link(tx,i+n),Link(ty,i+n);
  127. }
  128. for(int i=T;i;i--)
  129. if(qry[i].typ==)
  130. outp[++p]=mst[Query(qry[i].x,qry[i].y)].c;
  131. else
  132. {
  133. int tx=qry[i].x,ty=qry[i].y;
  134. int id=mmp[make_pair(tx,ty)],me=Query(tx,ty);
  135. if(mst[id].c<mst[me].c)
  136. {
  137. Cut(mst[me].x,me+n),Cut(mst[me].y,me+n);
  138. Link(tx,id+n),Link(ty,id+n);
  139. }
  140. }
  141. while(p)
  142. printf("%d\n",outp[p--]);
  143. return ;
  144. }

解题:WC 2006 水管局长的更多相关文章

  1. 数据结构(动态树):COGS 27. [WC 2006] 水管局长

    27. [WC 2006] 水管局长 ★★★☆   输入文件:tube.in   输出文件:tube.out   简单对比时间限制:3 s   内存限制:128 MB [问题描述 ] SC 省 MY ...

  2. [WC 2006]水管局长数据加强版

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  3. [WC 2006] 水管局长

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2594 [算法] 首先离线 , 将删边操作转化为倒序加边 假设我们已经维护出了一棵最小 ...

  4. bzoj 2594: [Wc2006]水管局长数据加强版

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  5. BZOJ 2594: [Wc2006]水管局长数据加强版(kruskal + LCT)

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  6. BZOJ2594: [Wc2006]水管局长数据加强版

    题解: 裸LCT+离线+二分+MST... 代码:(几乎摘抄自hzwer) #include<cstdio> #include<cstdlib> #include<cma ...

  7. bzoj 2594: [Wc2006]水管局长数据加强版 动态树

    2594: [Wc2006]水管局长数据加强版 Time Limit: 25 Sec  Memory Limit: 128 MBSubmit: 934  Solved: 291[Submit][Sta ...

  8. BZOJ 2594: [Wc2006]水管局长数据加强版( LCT )

    离线然后就是维护加边的动态MST, Link cut tree秒掉..不过我写+调了好久...时间复杂度O(NlogN + MlogM) ------------------------------- ...

  9. [bzoj2594][Wc2006]水管局长数据加强版 (lct)

    论蒟蒻的自我修养T_T.. 和noi2014魔法森林基本一样...然而数据范围大得sxbk...UPD:这题如果用lct判联通的话可能会被卡到O(mlogm)..所以最好还是用并查集吧 一开始数组开太 ...

随机推荐

  1. linux压缩相关

    tar命令 tar是打包,即把好多东西放在一个大文件里面,之后再压缩:当然也可以解包 tar的几个参数说明: -c 创建一个新的包 -x 将包里的文件还原出来 -t 显示包内文件的列表 -f 指定要处 ...

  2. lsmod命令详解

    基础命令学习目录首页 原文链接:http://blog.sina.com.cn/s/blog_e6b2465d0101fuev.html lsmod——显示已载入系统的模块 lsmod 其实就是lis ...

  3. python之multiprocessing创建进程

    python的multiprocessing模块是用来创建多进程的,下面对multiprocessing总结一下使用记录. multiprocessing创建多进程在windows和linux系统下的 ...

  4. 互评Beta版本-SkyHunter

    基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题;   N(Need,需求):飞机大战题材的游戏对80,90后的人来说算是童年的记忆,可以在闲暇之余打开电脑玩一会儿.但是 ...

  5. Scrum Meeting 3 -2014.11.5

    这几天小伙伴们都在努力,研究出不少改进方案并加以设计和实施了,分词算法的优化进度可观,而其他的任务在改进的过程中产生了些问题,对于之前代码的设计感到疑惑,我们找到了上届的学长们咨询,他们也给出了不少建 ...

  6. iOS自学-UILabel常见属性

    #import "ViewController.h" #import <CoreText/CoreText.h> @interface ViewController ( ...

  7. jQuery全屏滚动插件fullPage使用

    1. 引入jquery.js和jquery.fullPage.min.js <script src="jquery.min.js"></script> &l ...

  8. 软工1816 · Beta冲刺(1/7)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成beta冲刺阶段的任务安排 整理博客 接下来的计划 & 还剩下哪些 ...

  9. 第一次spring冲刺第3、4天

    11月14至15日 因为忙于项目的谈论与探究,以及周末的活动变动,使得博客没有时间提交上去,这里补交. 这两天,主要是应对于市场的探究做谈论,我们主要面对什么类型的客户,以及他们最需要的是什么等话题做 ...

  10. 17_常用API_第17天(包装类、System、Math、Arrays、大数据运算)_讲义

    今日内容介绍 1.基本类型包装类 2.System类 3.Math类 4.Arrays类 5.大数据运算 01基本数据类型对象包装类概述 *A:基本数据类型对象包装类概述 *a.基本类型包装类的产生 ...