先存个代码

 #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. this self指针

    this 和 self指针 为函数提供了运行上下问:为函数提供了当前对象的其实地址,方便函数的对对象的访问.

  2. Unity局部坐标系与世界坐标系的区别

    局部坐标旋转是指以父物体为参考,进行旋转. 而世界坐标系以"坐标陀螺"来进行旋转. 类似的情况例如: 东.南.西.北.是世界坐标系. 前.后.左.右是局部坐标系

  3. 第二章 Python数据类型详解

    基本概念 迭代(iteration):如果给定一个list或tuple,我们可以通过for循环来遍历,这种遍历我们称为迭代(iteration) 可变:value改变,id不变,可变类型是不可hash ...

  4. Hive 基本操作

    1.创建一个表 (字段表名不加引号‘,分隔符需要加引号) create table t1( id int ,name string ,hobby array<string> ,add ma ...

  5. centos7安装anaconda之后报错:rpm: /home/wyl/anaconda3/lib/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)

    1.报错 参考:https://stackoverflow.com/questions/47633870/rpm-lib64-liblzma-so-5-version-xz-5-1-2alpha-no ...

  6. [中文] 以太坊(Ethereum )白皮书

    以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译|巨蟹 .少平 译者注|中文读者可以到以太坊爱好者社区(www.ethfans.org)获取最新的以太坊信息. 当中本聪在2009年 ...

  7. linux软链接与硬链接详解

    软连接 命令: ln -s 原文件 目标文件 特征: 1.相当于windows的快捷方式 2.只是一个符号连接,所以软连接文件大小都很小 3.当运行软连接的时候,会根据连接指向找到真正的文件,然后执行 ...

  8. python的基础及练习

    1.变量变是指变化,量是指反映某种状态例:level =1 或 2 username = ‘xuanxuan’password = ‘123’python里的“=”是赋值的意思,并不是真的等于 变量有 ...

  9. 利用GitHub搭建Hexo博客并开启HTTPS

    Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页. GitHub 是一个面向开源及私有软件项目的托管平台 ...

  10. 前后端交互&交互接口

    前后端数据交互之数据接口 废话就不多说了,我们都知道,前端通常会通过后台提供的接口来获取数据来完成前端页面的渲染. 1.前端通过接口调用后台返回的数据 <!DOCTYPE html PUBLIC ...