link-cut tree

  1. // It is made by XZZ
  2. #include<cstdio>
  3. #include<algorithm>
  4. #define il inline
  5. #define rg register
  6. #define vd void
  7. #define sta static
  8. typedef long long ll;
  9. il int gi(){
  10. rg int x=0,f=1;rg char ch=getchar();
  11. while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
  12. while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
  13. return x*f;
  14. }
  15. const int maxn=10001;
  16. namespace LCT{
  17. int ch[maxn][2],fa[maxn];bool rev[maxn];
  18. il vd down(int x){if(rev[x])rev[x]=0,rev[ch[x][0]]^=1,rev[ch[x][1]]^=1,std::swap(ch[x][0],ch[x][1]);}
  19. il bool isrt(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}
  20. il vd rot(int x){
  21. sta int y,z,o;
  22. y=fa[x],z=fa[y],o=x==ch[y][1];
  23. if(!isrt(y))ch[z][y==ch[z][1]]=x;fa[x]=z;
  24. ch[y][o]=ch[x][!o];fa[ch[x][!o]]=y;
  25. ch[x][!o]=y;fa[y]=x;
  26. }
  27. il vd splay(int x){
  28. sta int stk[maxn],top;stk[top=1]=x;
  29. for(rg int i=x;!isrt(i);i=fa[i])stk[++top]=fa[i];
  30. while(top)down(stk[top--]);
  31. for(rg int y=fa[x],z=fa[y];!isrt(x);rot(x),y=fa[x],z=fa[y])
  32. if(!isrt(y))rot(((x==ch[y][1])^(y==ch[z][1]))?y:x);
  33. }
  34. il vd access(int x){for(rg int y=0;x;x=fa[y=x])splay(x),ch[x][1]=y;}
  35. il vd makert(int x){access(x),splay(x);rev[x]^=1;}
  36. il int find(int x){for(access(x),splay(x);ch[x][0];x=ch[x][0]);return x;}
  37. il vd link(int x,int y){makert(x),fa[x]=y;}
  38. il vd cut(int x,int y){makert(x);access(y),splay(y);fa[x]=ch[y][0]=0;}
  39. }
  40. int main(){
  41. freopen("sdoi2008_cave.in","r",stdin);
  42. freopen("sdoi2008_cave.out","w",stdout);
  43. using namespace LCT;
  44. int n,m,u,v;char opt[20],str[][5]={"No","Yes"};
  45. n=gi(),m=gi();
  46. while(m--){
  47. scanf("%s",opt);u=gi(),v=gi();
  48. if(opt[0]=='Q')puts(str[find(u)==find(v)]);
  49. else if(opt[0]=='C')link(u,v);
  50. else cut(u,v);
  51. }
  52. return 0;
  53. }

常数有点小大。

cogs1889 [SDOI2008]Cave 洞穴勘测 link-cut tree的更多相关文章

  1. bzoj2049 [Sdoi2008]Cave 洞穴勘测 link cut tree入门

    link cut tree入门题 首先说明本人只会写自底向上的数组版(都说了不写指针.不写自顶向下QAQ……) 突然发现link cut tree不难写... 说一下各个函数作用: bool isro ...

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

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

  3. 【bzoj2049】[Sdoi2008]Cave 洞穴勘测 link-cut-tree

    2016-05-30  11:04:51 学习了link-cut-tree 二中神犇封禹的讲义感觉讲的超级清晰易懂啊(没有的可以q窝 算是模板吧 #include<bits/stdc++.h&g ...

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

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

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

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

  6. BZOJ_2049_[Sdoi2008]Cave 洞穴勘测_LCT

    BZOJ_2049_[Sdoi2008]Cave 洞穴勘测_LCT Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由 ...

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

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

  8. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 (动态树入门)

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

  9. 2049: [Sdoi2008]Cave 洞穴勘测

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 7475  Solved: 3499 [Submi ...

随机推荐

  1. PowerShell管理SCOM_批量设置维护模式(下)

    #定义存储需要置为维护模式的计算机名称列表$serverlist = "C:\scomm\servers.txt"#定义RMS服务器名称$rmsServerName=”scomw. ...

  2. 铁乐学python_Day39_多进程和multiprocess模块2

    铁乐学python_Day39_多进程和multiprocess模块2 锁 -- multiprocess.Lock (进程同步) 之前我们千方百计实现了程序的异步,让多个任务可以同时在几个进程中并发 ...

  3. lambda 形参:返回值 lambda 匿名函数 格式:

    lambda 匿名函数 格式: lambda 形参:返回值 e.g f = lambda n:n**2 print(f(10))

  4. 在.NET中操作数字证书(新手教程)

    .NET为我们提供了操作数字证书的两个主要的类,分为为: System.Security.Cryptography.X509Certificates.X509Certificate2类, 每个这个类的 ...

  5. python中string格式化

    python中可以对string, int, float等数据类型进行格式化操作.下面举例来说明一些常用操作. 先贴出 python 对 String Formatting Operations 讲解 ...

  6. 【CF809E】Surprise me!

    题目 这是一道神仙题 看到这样一个鬼畜的柿子 \[\sum_{i=1}^n\sum_{j=1}^n\varphi(a_i\times a_j)\times dis(i,j)\] 又是树上距离又是\(\ ...

  7. YII缓存整理

    缓存 缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 如下的应用配置指定了一 ...

  8. Docker删除/停止容器

    应用场景:某个相关的业务需要重启,容器太多了,一个一个通过命令行来关闭太麻烦了,直接一条命令直接搞定. 命令如下: $ docker ps // 查看所有正在运行容器 $ docker stop co ...

  9. python中numpy.sum()函数

    讲解清晰,转载自:https://blog.csdn.net/rifengxxc/article/details/75008427 众所周知,sum不传参的时候,是所有元素的总和.这里就不说了. 1 ...

  10. C. Phone Numbers

    http://codeforces.com/problemset/problem/940/C And where the are the phone numbers? You are given a ...