模板:

  以下为弹飞绵羊代码:

 #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指针模板的更多相关文章

  1. Luogu 3690 Link Cut Tree

    Luogu 3690 Link Cut Tree \(LCT\) 模板题.可以参考讲解和这份码风(个人认为)良好的代码. 注意用 \(set\) 来维护实际图中两点是否有直接连边,否则无脑 \(Lin ...

  2. 洛谷P3690 Link Cut Tree (模板)

    Link Cut Tree 刚开始写了个指针版..调了一天然后放弃了.. 最后还是学了黄学长的板子!! #include <bits/stdc++.h> #define INF 0x3f3 ...

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

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

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

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

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

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

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

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

  7. AC日记——【模板】Link Cut Tree 洛谷 P3690

    [模板]Link Cut Tree 思路: LCT模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 30 ...

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

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

  9. LG3690 【模板】Link Cut Tree 和 SDOI2008 洞穴勘测

    UPD:更新了写法. [模板]Link Cut Tree 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 后接两个整数(x,y),代表询问从x到y ...

  10. (RE) luogu P3690 【模板】Link Cut Tree

    二次联通门 : luogu P3690 [模板]Link Cut Tree 莫名RE第8个点....如果有dalao帮忙查错的话万分感激 #include <cstdio> #includ ...

随机推荐

  1. PM2 Quick Start

    PM2教程 @(Node)[负载均衡|进程管理器] [TOC] PM2简介 PM2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永 ...

  2. Spring Cloud 入门教程 - Eureka服务注册与发现

    简介 在微服务中,服务注册与发现对管理各个微服务子系统起着关键作用.随着系统水平扩展的越来越多,系统拆分为微服务的数量也会相应增加,那么管理和获取这些微服务的URL就会变得十分棘手,如果我们每新加一个 ...

  3. Form 和 Input 对象

    更改表单的 action 属性 <html> <head> <script type="text/javascript"> function c ...

  4. ORACLE复杂查询之连接查询

    一.传统的连接查询 1.交叉连接:返回笛卡尔积 WHERE中限定查询条件,可以预先过滤掉掉不符合条件的记录,返回的只是两个表中剩余记录(符合条件的记录)的笛卡尔积. 2.内连接:参与连接的表地位平等, ...

  5. 小议 HashMap

    大家都知道,在Java里对对象的操作是基于引用的.而当我们需要对一组对象操作的时候,就需要有接收这一组引用的容器.平时我们最常用的就是数组.在Java里可以定义一个对象数组来完成许多操作.可是,数组长 ...

  6. Python2和Python3比较分析

    一直有看到网上有讨论Python2和Python3的比较,最近公司也在考虑是否在spark-python大数据开发环境中升级到python3.通过本篇博文记录Python2.7.13和Pthon3.5 ...

  7. SOFA 源码分析 — 连接管理器

    前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ...

  8. Java Web Without SSM(前言)

    是的,Spring,Mybaties确实给我们带来了方便的轻量级JavaWeb开发,但是,对于大部分中小系统来说,分层,框架,规范,已经成为一种累赘.实际的程序开发过程中,大部分时间都花在了" ...

  9. cocos2d-x学习之路之工作吐槽

    经过大半年的cocos2d-x的学习,目前已在一个游戏创业公司实习,负责客户端的代码编写和维护.公司做了一款网游.比较给力,马上就要发布了.希望能够大卖.比较坑的是,居然电脑不给联网.查资料都不好查, ...

  10. python:Json模块dumps、loads、dump、load介绍

    由上篇文章(python3+requests:get/post请求)涉及到的json.dumps()扩展 1.json.dumps()用于将dict类型的数据转成str 备注:文件路径前面加上 r 是 ...