大概就是供自己复习的吧

1、 细节讲解

安利两篇blog:


2、模板

把 $ rev $ 和 $ pushdown $ 的位置记清

#define lc son[x][0]
#define rc son[x][1]
#include <bits/stdc++.h>
using namespace std;
const int maxn=;
int son[maxn][] ,fa[maxn], st[maxn];
int lazy[maxn], s[maxn], v[maxn];
bool ws(int x){
return son[fa[x]][]==x;
}
bool isroot(int x){
return !(son[fa[x]][]==x||son[fa[x]][]==x);
}
void update(int x){
s[x]=s[lc]^s[rc]^v[x];
}
void rev(int x){
swap(lc,rc); lazy[x]^=;
}
void pushdown(int x){
if(lazy[x]){
if(lc) rev(lc);
if(rc) rev(rc);
lazy[x]=;
}
}
void rot(int x){
int f=fa[x], ff=fa[f], w1=ws(x), w2=ws(f), xx=son[x][!w1];
if(!isroot(f))son[ff][w2]=x;son[x][!w1]=f;son[f][w1]=xx;
if(xx)fa[xx]=f;fa[f]=x;fa[x]=ff;
update(f);
}
void splay(int x){
int f=x,z=;
st[++z]=f;
while(!isroot(f)) st[++z]=f=fa[f];
while(z) pushdown(st[z--]);
for(;!isroot(x);rot(x))
if(!isroot(fa[x])&&ws(x)==ws(fa[x])) rot(fa[x]);
update(x);
}
void access(int x){
for(int y=;x;x=fa[y=x]){
splay(x), rc=y; update(x);
}
}
void makeroot(int x){
access(x); splay(x);
rev(x);
}
int findroot(int x){
access(x); splay(x);
while(lc) pushdown(x),x=lc;
return x;
}
void split(int x,int y){ //提取路径
makeroot(x);
access(y); splay(y);
}
void link(int x,int y){ //把x的爸爸设为y
makeroot(x);
if(findroot(y)!=x) fa[x]=y;
}
void cut(int x,int y){
makeroot(x);
if(findroot(y)==x&&fa[x]==y&&!rc){
fa[x]=son[y][]=; update(y);
}
} int main(){
int n,m,i,op,x,y;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&v[i]);
while(m--){
scanf("%d%d%d",&op,&x,&y);
if(op==) split(x,y),printf("%d\n",s[y]);
if(op==) link(x,y);
if(op==) cut(x,y);
if(op==) splay(x),v[x]=y;
}
return ;
}

【学习笔记】LCT link cut tree的更多相关文章

  1. 学习笔记:Link Cut Tree

    模板题 原理 类似树链剖分对重儿子/长儿子剖分,Link Cut Tree 也做的是类似的链剖分. 每个节点选出 \(0 / 1\) 个儿子作为实儿子,剩下是虚儿子.对应的边是实边/虚边,虚实时可以进 ...

  2. LCT(link cut tree) 动态树

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

  3. Link Cut Tree学习笔记

    从这里开始 动态树问题和Link Cut Tree 一些定义 access操作 换根操作 link和cut操作 时间复杂度证明 Link Cut Tree维护链上信息 Link Cut Tree维护子 ...

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

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

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

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

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

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

  7. link cut tree 入门

    鉴于最近写bzoj还有51nod都出现写不动的现象,决定学习一波厉害的算法/数据结构. link cut tree:研究popoqqq那个神ppt. bzoj1036:维护access操作就可以了. ...

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

    P3690 [模板]Link Cut Tree (动态树) 认父不认子的lct 注意:不 要 把 $fa[x]$和$nrt(x)$ 混 在 一 起 ! #include<cstdio> v ...

  9. Link Cut Tree 总结

    Link-Cut-Tree Tags:数据结构 ##更好阅读体验:https://www.zybuluo.com/xzyxzy/note/1027479 一.概述 \(LCT\),动态树的一种,又可以 ...

随机推荐

  1. Html5的Web存储和WebSql

    HTML5 Web 存储 使用HTML5可以在本地存储用户的浏览数据. 早些时候,本地存储使用的是cookies.但是Web 存储需要更加的安全与快速. 这些数据不会被保存在服务器上,但是这些数据只用 ...

  2. Linux:LAMP搭建DISCU!论坛

    LAMP搭建DISCU!论坛 试验机为centos6.8 i686 应用的包 mysql-5.1.73-linux-i686-glibc23.tar.gz httpd-2.2.24.tar.bz2 p ...

  3. Lua的清屏快捷方式

    1. Lua (Command Line) 这里清屏的方式是: os.execute("cls") 就是执行了DOS中的清屏命令! 2.SciTE中的清屏方式: -----(1)第 ...

  4. jquery-ui 拖拽排序

    : 引入   <script src="//code.jquery.com/jquery-1.9.1.js"></script> <script sr ...

  5. [svn]显示日志很慢 点击文件查看更改记录也贼慢

    特此记录,防止以后忘记. 解决办法: 在 C:\Windows\System32\drivers\etc (win7) 中加入 即可 亦或将代码的url中pc名字改为ip地址也可以解决问题 对文件夹点 ...

  6. OC中使用单例模式

    static Config * instance = nil; +(Config *) Instance { @synchronized(self) { if(nil == instance) { [ ...

  7. 压力测试工具ab及centos下单独安装方法

    压力测试工具Ab简介 Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-uti ...

  8. 使用python处理selenium中的frame切换问题

    # iframe有name或id值 self.driver.switch_to.frame('iframe-name-id') # iframe没有name或id值 xf = self.driver. ...

  9. flask第十二篇——自定义url转换器【2】

    继续昨天的话题,今天我们来写一个手机号的转换器,方便大家理解 我们在`BaseConverter`源码里看到好多这种正则表达式: 正则表达式的目的就是规范匹配的规则,现在我们写一个简单的匹配手机号的正 ...

  10. 一个查看Cookie的便捷工具——EditThisCookie

    Appium正在努力准备中,很快就要和大家见面了- 今天给大家分享一个查看cookies的工具,用fiddler总感觉有点麻烦,还乱七八糟的找不到到底哪个链接是当前网站的cookies: 首先,你用的 ...