题意:三种操作一种摧毁一条边,一种链接一条边,一种查询两个点是否联通

题解:lct的link和cut即可

  1. /**************************************************************
  2. Problem: 2049
  3. User: walfy
  4. Language: C++
  5. Result: Accepted
  6. Time:1896 ms
  7. Memory:1508 kb
  8. ****************************************************************/
  9. //#pragma comment(linker, "/stack:200000000")
  10. //#pragma GCC optimize("Ofast,no-stack-protector")
  11. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  12. //#pragma GCC optimize("unroll-loops")
  13. #include<bits/stdc++.h>
  14. #define fi first
  15. #define se second
  16. #define mp make_pair
  17. #define pb push_back
  18. #define pi acos(-1.0)
  19. #define ll long long
  20. #define vi vector<int>
  21. #define mod 1000000007
  22. #define ld long double
  23. #define C 0.5772156649
  24. #define ls l,m,rt<<1
  25. #define rs m+1,r,rt<<1|1
  26. #define pil pair<int,ll>
  27. #define pli pair<ll,int>
  28. #define pii pair<int,int>
  29. #define cd complex<double>
  30. #define ull unsigned long long
  31. #define base 1000000000000000000
  32. #define fio ios::sync_with_stdio(false);cin.tie(0)
  33. using namespace std;
  34. const double eps=1e-6;
  35. const int N=10000+1,maxn=5000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
  36. struct LCT{
  37. int fa[N],ch[N][2],rev[N],q[N];
  38. bool isroot(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}
  39. void pushup(int x){}
  40. void pushdown(int x)
  41. {
  42. if(rev[x])
  43. {
  44. rev[x]=0;swap(ch[x][0],ch[x][1]);
  45. rev[ch[x][0]]^=1,rev[ch[x][1]]^=1;
  46. }
  47. }
  48. void Rotate(int x)
  49. {
  50. int y=fa[x],z=fa[y],l,r;
  51. if(ch[y][0]==x)l=0,r=l^1;
  52. else l=1,r=l^1;
  53. if(!isroot(y))
  54. {
  55. if(ch[z][0]==y)ch[z][0]=x;
  56. else ch[z][1]=x;
  57. }
  58. fa[x]=z;fa[y]=x;fa[ch[x][r]]=y;
  59. ch[y][l]=ch[x][r];ch[x][r]=y;
  60. pushup(y);pushup(x);
  61. }
  62. void splay(int x)
  63. {
  64. int top=1;q[top]=x;
  65. for(int i=x;!isroot(i);i=fa[i])q[++top]=fa[i];
  66. for(int i=top;i;i--)pushdown(q[i]);
  67. while(!isroot(x))
  68. {
  69. int y=fa[x],z=fa[y];
  70. if(!isroot(y))
  71. {
  72. if((ch[y][0]==x)^(ch[z][0]==y))Rotate(x);
  73. else Rotate(y);
  74. }
  75. Rotate(x);
  76. }
  77. }
  78. void access(int x){for(int y=0;x;y=x,x=fa[x])splay(x),ch[x][1]=y,pushup(x);}
  79. void makeroot(int x){access(x),splay(x),rev[x]^=1;}
  80. int findroot(int x){access(x),splay(x);while(ch[x][0])x=ch[x][0];return x;}
  81. void split(int x,int y){makeroot(x),access(y),splay(y);}
  82. void cut(int x,int y){split(x,y);if(ch[y][0]==x)ch[y][0]=0,fa[x]=0;}
  83. void link(int x,int y){makeroot(x),fa[x]=y;}
  84. }lct;
  85. char s[N];
  86. int main()
  87. {
  88. int n,m;
  89. scanf("%d%d",&n,&m);
  90. while(m--)
  91. {
  92. char op[10];
  93. int x,y;
  94. scanf("%s%d%d",op,&x,&y);
  95. if(op[0]=='Q')
  96. {
  97. int fx=lct.findroot(x),fy=lct.findroot(y);
  98. if(fx!=fy)puts("No");
  99. else puts("Yes");
  100. }
  101. else if(op[0]=='C')
  102. {
  103. int fx=lct.findroot(x),fy=lct.findroot(y);
  104. if(fx!=fy)lct.link(x,y);
  105. }
  106. else if(op[0]=='D')
  107. {
  108. int fx=lct.findroot(x),fy=lct.findroot(y);
  109. if(fx==fy)lct.cut(x,y);
  110. }
  111. }
  112. return 0;
  113. }
  114. /********************
  115. 200 5
  116. Query 123 127
  117. Connect 123 127
  118. Query 123 127
  119. Destroy 127 123
  120. Query 123 127
  121. ********************/

bzoj2049: [Sdoi2008]Cave 洞穴勘测 lct裸题的更多相关文章

  1. [BZOJ2049][Sdoi2008]Cave 洞穴勘测 LCT模板

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 9705  Solved: 4674[Submit] ...

  2. [BZOJ2049] [SDOI2008] Cave 洞穴勘测 (LCT)

    Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...

  3. BZOJ2049: [Sdoi2008]Cave 洞穴勘测 Link-Cut-Tree 模板题

    传送门 搞了这么长时间Splay终于可以搞LCT了,等等,什么是LCT? $LCT$就是$Link-Cut-Tree$,是维护动态树的一个很高效的数据结构,每次修改和查询的均摊复杂度为$O(logN) ...

  4. [bzoj2049][Sdoi2008]Cave 洞穴勘测——lct

    Brief Description 给定一个森林,您需要支持两种操作: 链接两个节点. 断开两个节点之间的链接. Algorithm Design 对于树上的操作,我们现在已经有了树链剖分可以处理这些 ...

  5. BZOJ2049 SDOI2008 Cave 洞穴勘测 【LCT】

    BZOJ2049 SDOI2008 Cave 洞穴勘测 Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分 ...

  6. 【LCT】BZOJ2049 [SDOI2008]Cave 洞穴勘测

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 10059  Solved: 4863[Submit ...

  7. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 LCT

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...

  8. bzoj 2049: [Sdoi2008]Cave 洞穴勘测 (LCT)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2049 题面: 2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 1 ...

  9. [bzoj2049][Sdoi2008]Cave 洞穴勘测_LCT

    Cave 洞穴勘测 bzoj-2049 Sdoi-2008 题目大意:维护一个数据结构,支持森林中加边,删边,求两点连通性.n个点,m个操作. 注释:$1\le n\le 10^4$,$1\le m\ ...

随机推荐

  1. yii2GridView的简单使用

    GridView::widget([ 'dataProvider' => $dataProvider,// 你传过来的ActiveDataProvider // 'filterModel' =& ...

  2. rac库grid目录权限(6751)导致数据库宕机案例 此方法仅用于紧急救助

    问题: 我的rac环境不小心通过chown命令改变了/u01目录及其子目录的权限,导致rac节点2数据库宕掉,sqlplus下打开数据库报错如下: [oracle@node2 ~]$ sqlplus ...

  3. 小米范工具系列之四:小米范HTTP批量发包器

    最新版本1.3,下载地址:http://pan.baidu.com/s/1c1NDSVe  文件名httpsender . 此工具使用java 1.8以上版本运行. 小米范HTTP批量发包器的主要功能 ...

  4. mysql 表的增删改查 修改表结构

    四.修改表结构 语法: . 修改表名 ALTER TABLE 表名 RENAME 新表名; . 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 ...

  5. java-基础-【三】try/catch/finally

    原文地址: https://my.oschina.net/bieber/blog/703251 一.单层的try/catch public int test(int a,int b){ try{ re ...

  6. PHP 自动加载的简单实现(推荐)

    基于psr的规范,使用命名空间和spl_autoload_register()来实现自动加载 文件结构: |--Api |--Account.php |--User.php |--Service |- ...

  7. VS Code 终端窗口无法输入命令的解决方案

    问题 今天打开vs code,打开终端窗口,发现不能输入命令了 解决方法 邮件桌面 vscode的快捷键,打开“兼容性”标签,勾选"以管理员身份运行此程序" 结果 修改之后重启vs ...

  8. vue开发笔记

    1.一定要弄明白什么是数据驱动,以前jQuery操作dom的那种思维模式可以不去考虑,在类似框架中任何一个效果的完成都是由数据驱动来完成的. 2.以.vue作为扩展名的文件,是vue组件,他是一个类, ...

  9. Qt 引用头文件 QT_BEGIN_NAMESPACE QT_END_NAMESPACE

    Qt里面引入头文件的两种方式: 1. #include <QMdiArea> #include<QSplashScreen> 2. QT_BEGIN_NAMESPACE cla ...

  10. Session应用之验证码

    package com.aeolia.view; import java.awt.Color; import java.awt.Font; import java.awt.image.Buffered ...