怎么说呢,照着打一遍就自然理解了,再打一遍就会背了,再打一遍就会推了。

  1 // luogu-judger-enable-o2
  2 #include<bits/stdc++.h>
  3 using namespace std;
  4 const int maxn=3E5+5;
  5 int fa[maxn],son[maxn][2],val[maxn],ans[maxn],n,m,opt,x,y,z;
  6 bool tag[maxn];
  7 bool notroot(int x){return son[fa[x]][0]==x||son[fa[x]][1]==x;}
  8 void update(int x){ans[x]=ans[son[x][0]]^ans[son[x][1]]^val[x];}
  9 void pushr(int x)
 10 {
 11     swap(son[x][0],son[x][1]);
 12     tag[x]^=1;
 13 }
 14 void pushdown(int x)
 15 {
 16     if(tag[x])
 17     {
 18         if(son[x][0])pushr(son[x][0]);
 19         if(son[x][1])pushr(son[x][1]);
 20         tag[x]=0;
 21     }
 22 }
 23 void rotate(int x,int c)
 24 {
 25     int y=fa[x];
 26     fa[x]=fa[y];
 27     son[y][!c]=son[x][c];
 28     if(son[x][c])fa[son[x][c]]=y;
 29     if(notroot(y)&&son[fa[y]][0]==y)son[fa[y]][0]=x;
 30     else if(notroot(y))son[fa[y]][1]=x;
 31     son[x][c]=y;
 32     fa[y]=x;
 33     update(y);
 34     update(x);
 35 }
 36 void down(int x)
 37 {
 38     if(!notroot(x)){pushdown(x);return;}
 39     down(fa[x]);
 40     pushdown(x);
 41 }
 42 void splay(int x)
 43 {
 44     down(x);
 45     while(true)
 46     {
 47         int y=fa[x];
 48         if(!notroot(x))break;
 49         if(!notroot(y))
 50         {
 51             if(son[y][0]==x)rotate(x,1);
 52             else rotate(x,0);
 53             break;
 54         }
 55         if(son[fa[y]][0]==y)
 56         {
 57             if(son[y][0]==x)rotate(y,1),rotate(x,1);
 58             else rotate(x,0),rotate(x,1);
 59         }
 60         else
 61         {
 62             if(son[y][1]==x)rotate(y,0),rotate(x,0);
 63             else rotate(x,1),rotate(x,0);
 64         }
 65     }
 66 }
 67 void access(int x)
 68 {
 69     for(int y=0;x;y=x,x=fa[x])
 70         splay(x),son[x][1]=y,update(x);
 71 }
 72 void makeroot(int x)
 73 {
 74     access(x);
 75     splay(x);
 76     pushr(x);
 77 }
 78 int findroot(int x)
 79 {
 80     access(x);
 81     splay(x);
 82     while(son[x][0])pushdown(x),x=son[x][0];
 83     splay(x);
 84     return x;
 85 }
 86 void split(int x,int y)
 87 {
 88     makeroot(x);
 89     access(y);
 90     splay(y);
 91 }
 92 void link(int x,int y)
 93 {
 94     makeroot(x);
 95     if(findroot(y)!=x)fa[x]=y;
 96 }
 97 void cut(int x,int y)
 98 {
 99     makeroot(x);
100     if(findroot(y)==x&&fa[y]==x&&!son[y][0])
101     {
102         fa[y]=son[x][1]=0;
103         update(x);
104         update(y);
105     }
106 }
107 int main()
108 {
109     ios::sync_with_stdio(false);
110     cin>>n>>m;
111     for(int i=1;i<=n;++i)cin>>val[i];
112     while(m--)
113     {
114         cin>>opt>>x>>y;
115         if(opt==0)
116         {
117             split(x,y);
118             cout<<ans[y]<<endl;
119         }
120         else if(opt==1)link(x,y);
121         else if(opt==2)cut(x,y);
122         else
123         {
124             splay(x);
125             val[x]=y;
126         }
127     }
128     return 0;
129 }

View Code

转载于:https://www.cnblogs.com/GreenDuck/p/10702363.html

LCT模板(无讲解)相关推荐

  1. php 模板 原理,php模板原理讲解

    php模板原理讲解 复制代码 代码如下: $data = array( 'title'=>'ilsea', 'list'=>array( 'hello', 'world' ) ); inc ...

  2. 小灯泡自媒体博客Spimes4.6收费typecho主题模板无加密无授权源码

    源码下载:小灯泡自媒体博客Spimes4.6收费typecho主题模板无加密无授权源码-小程序文档类资源-CSDN下载 Spimes主题专为博客.自媒体.资讯类的网站设计开发,自适应兼容手机.平板设备 ...

  3. 13.Django中几大常用模板标签讲解及实战使用 【for循环;if判断;页面跳转;开启关闭自动转义;url携带参数传递;注释】

    1.常用模板标签 (1)模板标签重要概念: ①定义:标签在渲染的过程中提供任意的逻辑. ②标签语法: 由 {% 和 %} 来定义的,例如:{%tag%} {%endtag%}   (2)常用模板标签讲 ...

  4. 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)

    [线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...

  5. P4720 【模板】扩展卢卡斯定理/exLucas(无讲解,纯记录模板)

    P4720 [模板]扩展卢卡斯定理/exLucas 题意: CnmmodpC_{n}^{m}\bmod pCnm​modp 对于 100% 的数据,1≤m≤n≤1018,2≤p≤106,不保证 p 是 ...

  6. BZOJ3282: Tree (LCT模板)

    Description 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和 ...

  7. Emlog精简模板无繁琐操作,适合新手

    简介: 版本介绍 模板PC手机自适应 模板适用于Emlog全部版本 文字广告在index.php 14-57行 站点推荐在index.php 95-151行 需要安装模板设置插件 关于Emlog6.0 ...

  8. 洛谷 - P3690 【模板】Link Cut Tree (动态树)(LCT模板)

    题目链接:点击查看 题目大意:给出 n 个带权节点,需要执行 m 次操作,每次操作分为四种类型: 0 x y 代表询问从 x 到 y 的路径上的点的权值的 xor 和.保证 x 到 y 是联通的. 1 ...

  9. 【2-SAT初学+模板题讲解】POJ3683 Priest John's Busiest Day

    什么是2-SAT? SAT是适定性(Satisfiability)问题的简称 .一般形式为k-适定性问题,简称 k-SAT. 可以证明,当k>2时,k-SAT是NP完全的.因此一般讨论的是k=2 ...

最新文章

  1. 9.Spring Security添加记住我功能
  2. 职场新人成功修炼五诀 迅速在职场占一席之地
  3. OpenCV 相机校正
  4. webstorm快捷键生成html页面,webstorm工具使用的快捷键
  5. Dynamic Web Module 3.0 requires Java 1.6 or newer.
  6. Scala Actor并发编程入门示例
  7. ROS actionlib学习(一)
  8. python单词词典_python:单词和词形词典
  9. 【bzoj2084】[Poi2010]Antisymmetry
  10. Comcast Xfinity家庭安全系统被曝严重漏洞
  11. python从键盘输入一个数n、输出大于n且不能整除3_python基础练习题
  12. DateTimePicker 控件置空
  13. 文献阅读(245)Roller
  14. 2021-2027全球及中国油田钻机行业研究及十四五规划分析报告
  15. 如何快速开通微信商户现金红包
  16. Linux 复制文件报 not a regular file
  17. BMFont 制作字体时,无法导入图片
  18. mdk ac6 CLANG
  19. Arduino ESP8266 SPI-FFS存储区域
  20. dotnet 基于 debian 创建一个 docker 的 sdk 镜像

热门文章

  1. 为ie和chrome FF单独设置样式的“条件注释法”、“类内属性前缀法”、“选择器前缀法”、实现方法 案例(推荐)
  2. CallBack函数 回调函数
  3. button的OnClick与OnClientClick事件
  4. 如何在网页中加入百度地图
  5. 实时人脸识别例子-tensorflow2.x keras
  6. [深度学习TF2][RNN-LSTM]文本情感分析包含(数据预处理-训练-预测)
  7. STL和C++标准库
  8. 网络爬虫中的模拟登陆获取数据(实例教学1)
  9. 最大子序列和的四种求解算法及其时间比较
  10. k8s 查看pod流量_Kubernetes K8S之Pod生命周期与探针检测