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 ... 
随机推荐
- PM2 Quick Start
			PM2教程 @(Node)[负载均衡|进程管理器] [TOC] PM2简介 PM2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永 ... 
- Spring Cloud 入门教程 - Eureka服务注册与发现
			简介 在微服务中,服务注册与发现对管理各个微服务子系统起着关键作用.随着系统水平扩展的越来越多,系统拆分为微服务的数量也会相应增加,那么管理和获取这些微服务的URL就会变得十分棘手,如果我们每新加一个 ... 
- Form 和 Input 对象
			更改表单的 action 属性 <html> <head> <script type="text/javascript"> function c ... 
- ORACLE复杂查询之连接查询
			一.传统的连接查询 1.交叉连接:返回笛卡尔积 WHERE中限定查询条件,可以预先过滤掉掉不符合条件的记录,返回的只是两个表中剩余记录(符合条件的记录)的笛卡尔积. 2.内连接:参与连接的表地位平等, ... 
- 小议 HashMap
			大家都知道,在Java里对对象的操作是基于引用的.而当我们需要对一组对象操作的时候,就需要有接收这一组引用的容器.平时我们最常用的就是数组.在Java里可以定义一个对象数组来完成许多操作.可是,数组长 ... 
- Python2和Python3比较分析
			一直有看到网上有讨论Python2和Python3的比较,最近公司也在考虑是否在spark-python大数据开发环境中升级到python3.通过本篇博文记录Python2.7.13和Pthon3.5 ... 
- SOFA 源码分析 — 连接管理器
			前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ... 
- Java Web Without SSM(前言)
			是的,Spring,Mybaties确实给我们带来了方便的轻量级JavaWeb开发,但是,对于大部分中小系统来说,分层,框架,规范,已经成为一种累赘.实际的程序开发过程中,大部分时间都花在了" ... 
- cocos2d-x学习之路之工作吐槽
			经过大半年的cocos2d-x的学习,目前已在一个游戏创业公司实习,负责客户端的代码编写和维护.公司做了一款网游.比较给力,马上就要发布了.希望能够大卖.比较坑的是,居然电脑不给联网.查资料都不好查, ... 
- python:Json模块dumps、loads、dump、load介绍
			由上篇文章(python3+requests:get/post请求)涉及到的json.dumps()扩展 1.json.dumps()用于将dict类型的数据转成str 备注:文件路径前面加上 r 是 ... 
