先存个代码

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
struct LinkCutTree{
struct node{
int fa,son[],rev,sum;
}t[];
int top,st[],v[];
int lr(int u){
return t[t[u].fa].son[]==u;
}
bool ntrt(int u){
return t[t[u].fa].son[]==u||t[t[u].fa].son[]==u;
}
void pushup(int u){
t[u].sum=t[t[u].son[]].sum^t[t[u].son[]].sum^v[u];
}
void getrev(int u){
swap(t[u].son[],t[u].son[]);
t[u].rev^=;
}
void pd(int u){
if(t[u].rev){
if(t[u].son[])getrev(t[u].son[]);
if(t[u].son[])getrev(t[u].son[]);
t[u].rev=;
}
}
void rotate(int u){
int p=t[u].fa,pp=t[p].fa,ch=lr(u);
if(ntrt(p))t[pp].son[t[pp].son[]==p]=u;
t[p].son[ch]=t[u].son[ch^];
t[t[p].son[ch]].fa=p;
t[p].fa=u;
t[u].son[ch^]=p;
t[u].fa=pp;
pushup(p);
pushup(u);
}
void splay(int u){
int now=u;
top=;
st[++top]=now;
while(ntrt(now))st[++top]=now=t[now].fa;
while(top)pd(st[top--]);
while(ntrt(u)){
int f=t[u].fa,ff=t[f].fa;
if(ntrt(f)){
rotate((!lr(u))^(!lr(f))?u:f);
}
rotate(u);
}
pushup(u);
}
void access(int u){
for(int now=;u;now=u,u=t[u].fa){
splay(u);
t[u].son[]=now;
pushup(u);
}
}
void makert(int u){
access(u);
splay(u);
getrev(u);
}
int findrt(int u){
access(u);
splay(u);
while(t[u].son[]){
pd(u);
u=t[u].son[];
}
return u;
}
void split(int x,int y){
makert(x);
access(y);
splay(y);
}
void link(int x,int y){
makert(x);
if(findrt(y)!=x)t[x].fa=y;
}
void cut(int x,int y){
split(x,y);
if(findrt(y)==x&&t[x].fa==y&&!t[x].son[]){
t[x].fa=t[y].son[]=;
pushup(y);
}
}
}lct;
int n,m,op,u,v;
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&lct.v[i]);
}
for(int i=;i<=m;i++){
scanf("%d%d%d",&op,&u,&v);
switch(op){
case :lct.split(u,v);printf("%d\n",lct.t[v].sum);break;
case :lct.link(u,v);break;
case :lct.cut(u,v);break;
case :lct.splay(u);lct.v[u]=v;break;
}
}
return ;
}

LCT笔记的更多相关文章

  1. 省选复习 - LCT 笔记

    目录 LCT 笔记 主要功能 和其它数据结构的比较 思想 虚实剖分 如何维护所有的链 实链 虚边 开始构思 具体要维护的功能(从基础到高级) Splay部分 access(u) make(u) fin ...

  2. LCT 学习笔记

    LCT学习笔记 前言 自己定的学习计划看起来完不成了(两天没学东西,全在补题),决定赶快学点东西 于是就学LCT了 简介 Link/Cut Tree是一种数据结构,我们用它解决动态树问题 但是LCT不 ...

  3. LCT做题笔记

    最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...

  4. $LCT$维护子树信息学习笔记

    \(LCT\)维护子树信息学习笔记 昨天\(FDF\)好题分享投了 \([ZJOI2018]\)历史 这题. 然后我顺势学学这个姿势. 结果调了一年...于是写个笔记记录一下. 基本原理 比较显然地, ...

  5. 学习笔记::LCT

    今天听见茹大神20分钟讲完了LCT,10分钟讲完平衡树,5分钟讲完树剖,感觉自己智商还不及他一半... 还有很多不懂:2017/1/15 的理解: access是干什么用的? 不知道,只知道他是用来把 ...

  6. LCT学习笔记

    最近自学了一下LCT(Link-Cut-Tree),参考了Saramanda及Yang_Zhe等众多大神的论文博客,对LCT有了一个初步的认识,LCT是一种动态树,可以处理动态问题的算法.对于树分治中 ...

  7. [总结] LCT学习笔记

    \(emmm\)学\(lct\)有几天了,大概整理一下这东西的题单吧 (部分参考flashhu的博客) 基础操作 [洛谷P1501Tree II] 题意 给定一棵树,要求支持 链加,删边加边,链乘,询 ...

  8. SPLAY,LCT学习笔记(六)

    这应该暂时是个终结篇了... 最后在这里讨论LCT的一个常用操作:维护虚子树信息 这也是一个常用操作 下面我们看一下如何来维护 以下内容转自https://blog.csdn.net/neither_ ...

  9. SPLAY,LCT学习笔记(五)

    这一篇重点探讨LCT的应用 例:bzoj 2631 tree2(国家集训队) LCT模板操作之一,利用SPLAY可以进行区间操作这一性质对维护懒惰标记,注意标记下传顺序和如何下传 #include & ...

随机推荐

  1. 修改properties文件后系统运行异常

    今天修改了项目的properties配置文件以后,运行会报异常,即使将内容改回,异常仍然存在.中间还会出现项目报错等问题,现将解决方法整理出来. 1.修改properties的打开方式,将打开方式从p ...

  2. ZBrush中如何对模型进行减面操作

    Decimation Master是ZBrush 4R8自带的一个插件.中文名叫减面大师.其功能非常强大,也非常的方便,可以帮助我们提高效率,减少电脑资源损耗.作为一名3D美术师是必须掌握的一个技术. ...

  3. Pyhton学习——Day6

    # def test(x) : #形参:不占内存空间,调用函数时传入值,程序完成形参释放内存# # 注释内容# # 代码内容# y = x*2# print(y)# # return# # test( ...

  4. [置顶] Elon Musk (伊隆·马斯克):无限的创想与意志的胜利

    Elon Musk (伊隆·马斯克):无限的创想与意志的胜利 很多人说 Steve Jobs 很伟大,这一点我认同.但是,单纯从创造出的产物而言,Elon Musk 的成就毫无疑问远远超越 Steve ...

  5. CF508E (贪心+搜索+构造)

    题目大意:让你构造一个括号序列,括号匹配的方式类似于栈,给出从左数每个括号 到和它匹配的右括号的 最小和最大距离,让你输出一个合法括号序列 看错题了以为是二分图,然后写了搜索 贪心发现如果距离往小了填 ...

  6. http://my.oschina.net/joanfen/blog/160156

    http://my.oschina.net/joanfen/blog/160156 http://code4app.com/ios/iOS7-Sampler/5254b2186803faba0d000 ...

  7. 紫书 习题7-8 UVa 12107 (IDA*)

    参考了这哥们的博客 https://blog.csdn.net/hyqsblog/article/details/46980287  (1)atoi可以char数组转int, 头文件 cstdlib ...

  8. ThinkPHP 跨模块调用操作方法(A方法与R方法)

    ThinkPHP 跨模块调用操作方法(A方法与R方法) 跨模块调用操作方法 前面说了可以使用 $this 来调用当前模块内的方法,但实际情况中还经常会在当前模块调用其他模块的方法.ThinkPHP 内 ...

  9. org.apache.hadoop.ipc.Client: Retrying connect to server

    这个问题导致jps查看结点进程时发现找不到NodeManager或一段时间后消失,网上查找了很多博客,因hadoop版本不一样且出错的原因也可能不同,所以找了老半天. 步骤:jps --> 看l ...

  10. Oracle字符乱码、数据越界訪问典型Bug分析

    Oracle字符乱码.数据越界訪问典型Bug分析 前言:           作为乙方,在甲方客户那里验收阶段发现两个诡异Bug. 下面就问题来源.问题根因.解决方式.怎样避免做具体描写叙述. .且两 ...