Link-Cut Tree指针模板
模板:
以下为弹飞绵羊代码:
#define Troy #include "bits/stdc++.h" using namespace std; const int N=2e5+; inline int read(){
int s=,k=;char ch=getchar();
while(ch<''|ch>'') ch=='-'?k=-:,ch=getchar();
while(ch>&ch<='') s=s*+(ch^),ch=getchar();
return s*k;
} #define size(t) (t?t->size:0)
#define rev(t) (t?t->rev^=1:0) struct Node{
int size,rev;
Node *fa,*son[];
Node(){fa=son[]=son[]=NULL;size=,rev=;}
inline void update(){
size=+size(son[])+size(son[]);
}
inline void pushdown(){
if(!rev) return;
rev=,swap(son[],son[]);
rev(son[]),rev(son[]);
}
}*pool[N],*tmp[N],tree[N];int top; inline void init_pool(){for(;top<N;++top) pool[top]=tree+top;} inline void newNode(Node *&p,Node *f){p=pool[--top];*p=Node();p->fa=f;}
inline void freeNode(Node *&p){pool[top++]=p,p=NULL;} int to[N],n;
class LinkCutTree{
public:
Node *node[N];
inline void init(int n){for(register int i=;i<=n;++i)newNode(node[i],NULL);} #define son(p) (p->fa->son[1]==p)
#define is_root(p) ((!p->fa)||(p->fa->son[0]!=p&&p->fa->son[1]!=p)) inline void rotate(Node *p){
int a=son(p)^;Node *f=p->fa;
f->son[a^]=p->son[a];
if(p->son[a]) p->son[a]->fa=f;
p->fa=f->fa;
if(!is_root(f)) p->fa->son[son(f)]=p;
f->fa=p,p->son[a]=f,f->update(),p->update();
} inline void splay(Node *p){
register int pos=;
for(Node *t=p;;t=t->fa){
tmp[++pos]=t;
if(is_root(t)) break;
}
for(;pos;--pos) tmp[pos]->pushdown();
for(;!is_root(p);rotate(p))
if(!is_root(p->fa)) rotate(son(p)==son(p->fa)?p->fa:p);
} inline void access(Node *p){
for(Node *pre=NULL;p;pre=p,p=p->fa)
splay(p),p->son[]=pre,p->update();
} inline void make_root(Node *p){
access(p),splay(p),rev(p);
} inline void cut(Node *x,Node *y){
make_root(x),access(y),splay(y);
x->fa=y->son[]=NULL;y->update();
} inline void link(Node *x,Node *y){make_root(x);x->fa=y;}
inline void link(int x,int y){node[x]->fa=node[y];} inline void op1(int x){
make_root(node[n+]),access(node[x]),splay(node[x]);
printf("%d\n",node[x]->size-);
} inline void op2(int x,int y){
cut(node[x],node[min(n+,x+to[x])]);
link(node[x],node[min(n+,y+x)]);to[x]=y;
}
}lct; int main(){
n=read();
init_pool();
lct.init(n+);
register int i;
for(i=;i<=n;++i){
to[i]=read();
lct.link(i,min(i+to[i],n+));
}
int q=read(),x,y;
while(q--){
if(read()==)
lct.op1(read()+);
else{
x=read(),y=read();
lct.op2(x+,y);
}
}return ;
}
Link-Cut Tree指针模板的更多相关文章
- Luogu 3690 Link Cut Tree
Luogu 3690 Link Cut Tree \(LCT\) 模板题.可以参考讲解和这份码风(个人认为)良好的代码. 注意用 \(set\) 来维护实际图中两点是否有直接连边,否则无脑 \(Lin ...
- 洛谷P3690 Link Cut Tree (模板)
Link Cut Tree 刚开始写了个指针版..调了一天然后放弃了.. 最后还是学了黄学长的板子!! #include <bits/stdc++.h> #define INF 0x3f3 ...
- LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)
为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...
- P3690 【模板】Link Cut Tree (动态树)
P3690 [模板]Link Cut Tree (动态树) 认父不认子的lct 注意:不 要 把 $fa[x]$和$nrt(x)$ 混 在 一 起 ! #include<cstdio> v ...
- 【刷题】洛谷 P3690 【模板】Link Cut Tree (动态树)
题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor ...
- LG3690 【模板】Link Cut Tree (动态树)
题意 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和.保证x到y是联通的 ...
- AC日记——【模板】Link Cut Tree 洛谷 P3690
[模板]Link Cut Tree 思路: LCT模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 30 ...
- 洛谷P3690 [模板] Link Cut Tree [LCT]
题目传送门 Link Cut Tree 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代 ...
- LG3690 【模板】Link Cut Tree 和 SDOI2008 洞穴勘测
UPD:更新了写法. [模板]Link Cut Tree 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 后接两个整数(x,y),代表询问从x到y ...
- (RE) luogu P3690 【模板】Link Cut Tree
二次联通门 : luogu P3690 [模板]Link Cut Tree 莫名RE第8个点....如果有dalao帮忙查错的话万分感激 #include <cstdio> #includ ...
随机推荐
- 14.QT-QFile文件,QBuffer缓冲区,QDir目录,QFileSystemWatcher文件系统监视
QFile Qt中所有与IO相关的类都继承于QIODevice,继承图如下所示: 其中QFile类便是用于文件操作的类 在QT中,将文件当做一种特殊的外部设备对待(比如:串口,usb等就是外部设备) ...
- Android性能优化之UI渲染性能优化
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本篇博客主要记录一些工作中常用的UI渲染性能优化及调试方法,理解这些方法对于我们编写高质量代码也是有一些帮助的,主要内容包括介绍CPU,GPU的职 ...
- 为何90%的IT技术人员不适合做老大
老男孩老师终于写了一篇让我觉得不错的文章,哈哈,转一下. 什么是格局? 格局就是能够很好的平衡短期利益和长期利益. 过分注重短期利益的人必然会失去长期利益,到头来一定会很普通. 例如:跳槽不断,可能短 ...
- Java永久代去哪儿了
http://www.infoq.com/cn/articles/Java-PERMGEN-Removed 在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法 ...
- dp,px,pt,sp 的区别 以及dp 和 px 互转
dp = dip : device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不 ...
- 安装RabbitMQ编译erlang时,checking for c compiler default output file name... configure:error:C compiler cannot create executables See 'config.log' for more details.
checking for c compiler default output file name... configure:error:C compiler cannot create executa ...
- HBuilder 打包流程
1.运行HBuilder---百度搜索HBuilder,官网下载安装包,解压,运行HBuilder.exe.注册账号,并登陆 2.新建app---在左边右键,选择新建APP,或者,点击中间的新建app ...
- oracle通用函数,nvl,nvl2,NULLIF ,coalesce
Oracle 通用函数 ① NVL 函数--------将空值转换成一个已知的值: 可以使用的数据类型有日期.字符.数字. 函数的一般形式: NVL(commission_pct,0) ...
- Java 领域从传统行业向互联网转型你必须知道的事儿
我为什么要写这篇文章 武林中,"天下武功出少林"指各门各派的武功都与少林武学有一定的渊源,技术也是相同的道理,对于Java领域的应用而言,传统行业与互联网行业的技术都来自J2SE和 ...
- HTTP 前端需明白的相关知识点
简介: http(Hyper Text Transfer Protocol)超文本传输协议是万维网应用层的协议,使用了面向连接的TCP作为运输层协议. 特征: 简单快速:通过url就可以访问资源,协议 ...