有了LCT这不就是思博题了吗

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 1000000;
  4. int n,m,t1,t2,t3;
  5. char op[5];
  6. struct LinkCutTree {
  7. int top, q[N], ch[N][2], fa[N], rev[N];
  8. inline void pushup(int x) {
  9. }
  10. inline void pushdown(int x) {
  11. if(!rev[x])
  12. return;
  13. rev[ch[x][0]]^=1;
  14. rev[ch[x][1]]^=1;
  15. rev[x]^=1;
  16. swap(ch[x][0],ch[x][1]);
  17. }
  18. inline bool isroot(int x) {
  19. return ch[fa[x]][0]!=x && ch[fa[x]][1]!=x;
  20. }
  21. inline void rotate(int p) {
  22. int q=fa[p], y=fa[q], x=ch[fa[p]][1]==p;
  23. ch[q][x]=ch[p][x^1];
  24. fa[ch[q][x]]=q;
  25. ch[p][x^1]=q;
  26. fa[q]=p;
  27. fa[p]=y;
  28. if(y)
  29. if(ch[y][0]==q)
  30. ch[y][0]=p;
  31. else if(ch[y][1]==q)
  32. ch[y][1]=p;
  33. pushup(q);
  34. pushup(p);
  35. }
  36. inline void splay(int x) {
  37. q[top=1]=x;
  38. for(int i=x; !isroot(i); i=fa[i])
  39. q[++top]=fa[i];
  40. for(int i=top; i; i--)
  41. pushdown(q[i]);
  42. for(; !isroot(x); rotate(x))
  43. if(!isroot(fa[x]))
  44. rotate((ch[fa[x]][0]==x)==(ch[fa[fa[x]]][0]==fa[x])?fa[x]:x);
  45. }
  46. void access(int x) {
  47. for(int t=0; x; t=x,x=fa[x])
  48. splay(x),ch[x][1]=t,pushup(x);
  49. }
  50. void makeroot(int x) {
  51. access(x);
  52. splay(x);
  53. rev[x]^=1;
  54. }
  55. int find(int x) {
  56. access(x);
  57. splay(x);
  58. while(ch[x][0])
  59. x=ch[x][0];
  60. return x;
  61. }
  62. void split(int x,int y) {
  63. makeroot(x);
  64. access(y);
  65. splay(y);
  66. }
  67. void cut(int x,int y) {
  68. split(x,y);
  69. if(ch[y][0]==x)
  70. ch[y][0]=0, fa[x]=0;
  71. }
  72. void link(int x,int y) {
  73. makeroot(x);
  74. fa[x]=y;
  75. }
  76. } tree;
  77. vector <pair<int,int> > vc;
  78. int main() {
  79. scanf("%d%d",&n,&m);
  80. for(int i=1; i<n; i++) {
  81. scanf("%d%d",&t1,&t2);
  82. tree.link(t1,t2);
  83. }
  84. for(int i=1; i<=m; i++) {
  85. scanf("%s",op);
  86. if(op[0]=='Q') {
  87. scanf("%d%d",&t1,&t2);
  88. if(tree.find(t1) == tree.find(t2))
  89. printf("Yes\n");
  90. else
  91. printf("No\n");
  92. }
  93. if(op[0]=='C') {
  94. scanf("%d%d",&t1,&t2);
  95. tree.cut(t1,t2);
  96. vc.push_back(make_pair(t1,t2));
  97. }
  98. if(op[0]=='U') {
  99. scanf("%d",&t1);
  100. t2=vc[t1-1].first, t3=vc[t1-1].second;
  101. tree.link(t2,t3);
  102. }
  103. }
  104. }

[luogu3950] 部落冲突 - Link Cut Tree的更多相关文章

  1. link cut tree 入门

    鉴于最近写bzoj还有51nod都出现写不动的现象,决定学习一波厉害的算法/数据结构. link cut tree:研究popoqqq那个神ppt. bzoj1036:维护access操作就可以了. ...

  2. Codeforces Round #339 (Div. 2) A. Link/Cut Tree 水题

    A. Link/Cut Tree 题目连接: http://www.codeforces.com/contest/614/problem/A Description Programmer Rostis ...

  3. Link/cut Tree

    Link/cut Tree 一棵link/cut tree是一种用以表示一个森林,一个有根树集合的数据结构.它提供以下操作: 向森林中加入一棵只有一个点的树. 将一个点及其子树从其所在的树上断开. 将 ...

  4. 洛谷P3690 Link Cut Tree (模板)

    Link Cut Tree 刚开始写了个指针版..调了一天然后放弃了.. 最后还是学了黄学长的板子!! #include <bits/stdc++.h> #define INF 0x3f3 ...

  5. LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)

    为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...

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

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

  7. P3690 【模板】Link Cut Tree (动态树)

    P3690 [模板]Link Cut Tree (动态树) 认父不认子的lct 注意:不 要 把 $fa[x]$和$nrt(x)$ 混 在 一 起 ! #include<cstdio> v ...

  8. Link Cut Tree学习笔记

    从这里开始 动态树问题和Link Cut Tree 一些定义 access操作 换根操作 link和cut操作 时间复杂度证明 Link Cut Tree维护链上信息 Link Cut Tree维护子 ...

  9. [CodeForces - 614A] A - Link/Cut Tree

    A - Link/Cut Tree Programmer Rostislav got seriously interested in the Link/Cut Tree data structure, ...

随机推荐

  1. Python爬虫连载9-JS加密之“盐”​、ajax请求

    一.JS加密之“盐”​ 1.salt属性“盐":多用于密码学,比如我们的银行卡是六位密码,但是实际上在银行的系统里,我们输入密码后,会给原始的密码添加若干字符,形成更加难以破解的密码.这个过 ...

  2. JavaDay11

    Java learning_Day11 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> ...

  3. python如何安装Jupyter notebook

    一,安装Jupyter notebook 环境:win10,python3.7 两种安装方式,这里只讲pip安装 pip install jupyter notebook 二,启动Jupyter no ...

  4. 关于Dijk采访的一些感想

    有效的程序员不应该浪费很多时间用于程序调试,他们应该一开始就不要把故障引入! 反复,一遍又一遍的尝试,真的会让人心烦,对于有的问题解决不了,其实有很多原因,写出来的程序其实是非常考验人的细节处理能力的 ...

  5. 聊聊SNMP协议

    注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 本文源链接:https://www.cnblogs.com/chloneda/p/snmp-protoco ...

  6. Python之pptx实现添加内容与删除(移动)页操作

    问题背景 大量表格数据需要生成指定格式的ppt文件,内容以文字和表格为主,首尾页与内容有固定格式.博主不熟悉VBA操作,希望通过模板用Python完成自动化. 基本思路 使用xlrd模块读取xlsx文 ...

  7. Spring学习笔记-高级装配-03

    主要内容: ●Spring profile ●条件化的bean声明 ●自动装配与歧义性 ● Spring表达式语言 本章介绍一些高级的装配技术,可实现更为高级的装配功能. 环境与profile 软件开 ...

  8. 曼孚科技:AI算法领域常用的39个术语(下)

    算法是人工智能(AI)核心领域之一. 本文整理了算法领域常用的39个术语,希望可以帮助大家更好地理解这门学科. 本文为下半部分,上半部分见本账号上一篇文章. 19.迁移学习(Transfer Lear ...

  9. Java基础汇总2019

    1.事务的ACID性: (1)原子性:要么做,要么都不做.程序操作执行未成功,则所做的更改会被撤销: (2)一致性:比如转账,a转给b一百元,则a的账户少100,b的账户多100,前后数据要一致: ( ...

  10. HTML/JavaScript实现地图以鼠标为圆心缩放和移动

    代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...