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

认父不认子的lct

注意:不 要 把 $fa[x]$和$nrt(x)$ 混 在 一 起 !

#include<cstdio>
void swap(int &a,int &b){a^=b^=a^=b;}
#define N 300005
int n,m,s[N],v[N],ch[][N],fa[N],rev[N];
#define lc ch[0][x]
#define rc ch[1][x]
bool nrt(int x){return ch[][fa[x]]==x||ch[][fa[x]]==x;}
void up(int x){s[x]=s[lc]^v[x]^s[rc];}
void Rev(int x){swap(lc,rc);rev[x]^=;}
void down(int x){if(rev[x])Rev(lc),Rev(rc),rev[x]=;}
void fadown(int x){if(nrt(x))fadown(fa[x]); down(x);}
void turn(int x){
int y=fa[x],z=fa[y],l=(ch[][y]==x),r=l^;
if(nrt(y)) ch[ch[][z]==y][z]=x;
fa[ch[r][x]]=y; fa[x]=z; fa[y]=x;
ch[l][y]=ch[r][x]; ch[r][x]=y;
up(y); up(x);
}
void splay(int x){
fadown(x);
for(;nrt(x);turn(x)){
int y=fa[x],z=fa[y];
if(nrt(y)) turn((ch[][y]==x)^(ch[][z]==y)?x:y);
}
}
void access(int x){for(int y=;x;y=x,x=fa[x])splay(x),rc=y,up(x);}//构造一棵splay,把当前树根与x用重边连起来
void makert(int x){access(x);splay(x);Rev(x);}//总树根改为x
int find(int x){//找x所在树的树根
access(x);splay(x);down(x);
while(lc) x=lc,down(x);
splay(x); return x;
}
void link(int x,int y){makert(x); if(find(y)!=x)fa[x]=y;}
void cut(int x,int y){
makert(x);
if(find(y)==x&&fa[y]==x&&!ch[][y]) rc=fa[y]=,up(x);
}
void split(int x,int y){makert(x);access(y);splay(y);}//拉出一条x-y的路径成为一个根为y的splay
int main(){
scanf("%d%d",&n,&m); int q1,q2,q3;
for(int i=;i<=n;++i) scanf("%d",&v[i]);
while(m--){
scanf("%d%d%d",&q1,&q2,&q3);
if(q1==) split(q2,q3),printf("%d\n",s[q3]);
else if(q1==) link(q2,q3);
else if(q1==) cut(q2,q3);
else splay(q2),v[q2]=q3;
}return ;
}

P3690 【模板】Link Cut Tree (动态树)的更多相关文章

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

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

  2. 洛谷.3690.[模板]Link Cut Tree(动态树)

    题目链接 LCT(良心总结) #include <cstdio> #include <cctype> #include <algorithm> #define gc ...

  3. 洛谷P3690 [模板] Link Cut Tree [LCT]

    题目传送门 Link Cut Tree 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代 ...

  4. Link Cut Tree 动态树 小结

    动态树有些类似 树链剖分+并查集 的思想,是用splay维护的 lct的根是动态的,"轻重链"也是动态的,所以并没有真正的轻重链 动态树的操作核心是把你要把 修改/询问/... 等 ...

  5. 洛谷P3690 Link Cut Tree (动态树)

    干脆整个LCT模板吧. 缺个链上修改和子树操作,链上修改的话join(u,v)然后把v splay到树根再打个标记就好. 至于子树操作...以后有空的话再学(咕咕咕警告) #include<bi ...

  6. LCT(link cut tree) 动态树

    模板参考:https://blog.csdn.net/saramanda/article/details/55253627 综合各位大大博客后整理的模板: #include<iostream&g ...

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

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

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

    题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor ...

  9. LuoguP3690 【模板】Link Cut Tree (动态树) LCT模板

    P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两 ...

随机推荐

  1. JFrame绝对布局

    通过代码:setLayout(null);设置容器布局为绝对布局. 添加控件要注意:一定要设置控件具体的位置.可通过代码setLocation(20, 20)或者setBounds(0, 0, 30, ...

  2. zyb的面试(广工14届比赛)

    这道题目在上半年ZOJ模拟上年青岛赛区ACM题的时候就已经出现了.当时我不会写,本来想着赛后补题的最后因为懒惰又没补. 现在这道题又出现了.这是上天对我的惩罚啊!!! 所以这次铁了心也要补这题.然后我 ...

  3. Entity Framework学习初级篇3--LINQ TO Entities

    LINQ 技术(即LINQ to Entities)使开发人员能够通过使用LINQ 表达式和LINQ 标准查询运算符,直接从开发环境中针对实体框架对象上下文创建灵活的强类型查询.LINQ to Ent ...

  4. python package

    简要说一下,一个python模块就是一个python文件:一个包就是存放python模块的目录结构,并且包下边必须要有一个可以为空的__init__.py模块 //test.py from mypac ...

  5. selenium元素单击不稳定解决方法

    selenium自动化测试过程中,经常会发现某一元素单击,很不稳定,有时候执行了点击没有反映. 以下总结两种解决方法:都是通过js注入的方式去点击. 1.F12查一看,要点击的按钮,或连接,有没有on ...

  6. servlet的请求转发与重定向

    重定向: Spring的重定向 spring的请求转发:

  7. Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔

    转自:https://blog.csdn.net/dcrmg/article/details/52561656 一. 图像金字塔 图像金字塔是一种以多分辨率来解释图像的结构,通过对原始图像进行多尺度像 ...

  8. HDU 4686 Arc of Dream(矩阵)

    Arc of Dream [题目链接]Arc of Dream [题目类型]矩阵 &题解: 这题你做的复杂与否很大取决于你建的矩阵是什么样的,膜一发kuangbin大神的矩阵: 还有几个坑点: ...

  9. 十一 JS继承

    // time:2016.2.1 // des:继承 function Enemy() { this.level = 50; console.log("Enemy constructor&q ...

  10. datatable的点击事件

    datatable的点击事件 在项目中遇到一个问题,在动态绑定到datatables上的数组,要是用table中的两个某一行中数据作为参数,通过鼠标点击进行获取,查阅官方文档得以解决: //首先定义一 ...