大概就是供自己复习的吧

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. jquery.lazyload.js 图片延迟加载

    当做网页的时候,特别是整个网页展示图片较多的时候,用到图片延迟效果是很好的 使用方法也非常简单. 1.在网页任何位置(一般是在</body>前面)加上如下代码(注意<script&g ...

  2. 基于AMBA总线的SPI协议IP核的设计与验证

    https://wenku.baidu.com/view/9542213131126edb6f1a1048.html?mark_pay_doc=2&mark_rec_page=1&ma ...

  3. (一) ffmpeg filter学习-使用流程

    FFMPEG中有一个类库:libavfilter.该类库提供了各种视音频过滤器.之前一直没有怎么使用过这个类库,最近看了一下它的使用说明,发现还是很强大的,有很多现成的filter供使用,完成视频的处 ...

  4. .net MVC3 架构搭建描述

    用visual studio创建.net MVC3 web项目时,默认情况下是将Views,Controllers,Models创建在一个项目中. 需要把Controllers和Models做为两个独 ...

  5. 每周荐书:机器学习、Java虚拟机、微信开发(评论送书)

    每周荐书:机器学习.Java虚拟机.微信开发(评论送书) 感谢大家对每周荐书栏目的支持,先公布下上周中奖名单 年精心雕琢,难得的"理论 + 实战案例 + 趟坑经验"总结 从需求分析 ...

  6. [Linux] jq:命令行JSON处理工具

    jq命令帮助我们很方便地在终端查看和处理json文件 jq命令的帮助信息: abby@abby:bgs$ jq -h jq - commandline JSON processor [version ...

  7. Microsoft Office Powerpoint、Visio 已停止工作解决办法

    现象:在使用visio的过程中经常会出现“Microsoft office visio已停止工作”只能将visio关闭:windows可以尝试恢复您的信息并重新启动该程序.office的其他组件不会出 ...

  8. 用eclipse打包可执行的jar(含第三方jar包)

    在eclipse中的解决方式如下: 在工程目录下(与src同层)建立lib目录,将第三方Jar包放到这个目录里(copy,paste即可)[如果直接引用本地的jar,一旦换电脑就呵呵了...] 右击工 ...

  9. 访问Mat矩阵中的元素并为其赋值

    在OpenCV中有三种方式访问矩阵中的数据元素:容易的方式,困难的方式,以及正确的方式.今天主要讲容易方式: 最容易的方式是使用宏CV_MAT_ELEM( matrix, elemtype, row, ...

  10. PHP匹配Email、URL、IP

    /* * 正则表达式匹配 */ $email = '137813369@qq.com'; $regex = '/\w+([−+.]\w+)*@\w+([−.]\w+)*\.\w+([−.]\w+)*/ ...