LCT模板(无讲解)
怎么说呢,照着打一遍就自然理解了,再打一遍就会背了,再打一遍就会推了。
![](/assets/blank.gif)
![](/assets/blank.gif)
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模板(无讲解)相关推荐
- php 模板 原理,php模板原理讲解
php模板原理讲解 复制代码 代码如下: $data = array( 'title'=>'ilsea', 'list'=>array( 'hello', 'world' ) ); inc ...
- 小灯泡自媒体博客Spimes4.6收费typecho主题模板无加密无授权源码
源码下载:小灯泡自媒体博客Spimes4.6收费typecho主题模板无加密无授权源码-小程序文档类资源-CSDN下载 Spimes主题专为博客.自媒体.资讯类的网站设计开发,自适应兼容手机.平板设备 ...
- 13.Django中几大常用模板标签讲解及实战使用 【for循环;if判断;页面跳转;开启关闭自动转义;url携带参数传递;注释】
1.常用模板标签 (1)模板标签重要概念: ①定义:标签在渲染的过程中提供任意的逻辑. ②标签语法: 由 {% 和 %} 来定义的,例如:{%tag%} {%endtag%} (2)常用模板标签讲 ...
- 【线段树】【模板】讲解 + 例题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(区间加值) ...
- P4720 【模板】扩展卢卡斯定理/exLucas(无讲解,纯记录模板)
P4720 [模板]扩展卢卡斯定理/exLucas 题意: CnmmodpC_{n}^{m}\bmod pCnmmodp 对于 100% 的数据,1≤m≤n≤1018,2≤p≤106,不保证 p 是 ...
- BZOJ3282: Tree (LCT模板)
Description 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和 ...
- Emlog精简模板无繁琐操作,适合新手
简介: 版本介绍 模板PC手机自适应 模板适用于Emlog全部版本 文字广告在index.php 14-57行 站点推荐在index.php 95-151行 需要安装模板设置插件 关于Emlog6.0 ...
- 洛谷 - P3690 【模板】Link Cut Tree (动态树)(LCT模板)
题目链接:点击查看 题目大意:给出 n 个带权节点,需要执行 m 次操作,每次操作分为四种类型: 0 x y 代表询问从 x 到 y 的路径上的点的权值的 xor 和.保证 x 到 y 是联通的. 1 ...
- 【2-SAT初学+模板题讲解】POJ3683 Priest John's Busiest Day
什么是2-SAT? SAT是适定性(Satisfiability)问题的简称 .一般形式为k-适定性问题,简称 k-SAT. 可以证明,当k>2时,k-SAT是NP完全的.因此一般讨论的是k=2 ...
最新文章
- 9.Spring Security添加记住我功能
- 职场新人成功修炼五诀 迅速在职场占一席之地
- OpenCV 相机校正
- webstorm快捷键生成html页面,webstorm工具使用的快捷键
- Dynamic Web Module 3.0 requires Java 1.6 or newer.
- Scala Actor并发编程入门示例
- ROS actionlib学习(一)
- python单词词典_python:单词和词形词典
- 【bzoj2084】[Poi2010]Antisymmetry
- Comcast Xfinity家庭安全系统被曝严重漏洞
- python从键盘输入一个数n、输出大于n且不能整除3_python基础练习题
- DateTimePicker 控件置空
- 文献阅读(245)Roller
- 2021-2027全球及中国油田钻机行业研究及十四五规划分析报告
- 如何快速开通微信商户现金红包
- Linux 复制文件报 not a regular file
- BMFont 制作字体时,无法导入图片
- mdk ac6 CLANG
- Arduino ESP8266 SPI-FFS存储区域
- dotnet 基于 debian 创建一个 docker 的 sdk 镜像
热门文章
- 为ie和chrome FF单独设置样式的“条件注释法”、“类内属性前缀法”、“选择器前缀法”、实现方法 案例(推荐)
- CallBack函数 回调函数
- button的OnClick与OnClientClick事件
- 如何在网页中加入百度地图
- 实时人脸识别例子-tensorflow2.x keras
- [深度学习TF2][RNN-LSTM]文本情感分析包含(数据预处理-训练-预测)
- STL和C++标准库
- 网络爬虫中的模拟登陆获取数据(实例教学1)
- 最大子序列和的四种求解算法及其时间比较
- k8s 查看pod流量_Kubernetes K8S之Pod生命周期与探针检测