Link-Cut Tree动态树模板
讲解博客:https://www.cnblogs.com/zhoushuyu/p/8137553.html
struct Link_Cut_Tree
{int fa[N],ch[N][2],sum[N],rev[N],Stack[N],top;bool son(int x)//判断点x是父节点的左儿子还是右儿子 {return x==ch[fa[x]][1];}bool isroot(int x)//判断一个点是不是根节点(当前splay的根节点){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}void pushup(int x)//上传(维护信息){sum[x]=sum[ch[x][0]]^sum[ch[x][1]]^val[x];}void reverse(int x)//交换左右子树 {if(!x)return;swap(ch[x][0],ch[x][1]);rev[x]^=1;}void pushdown(int x)//下传(更新反转标记用){if(!rev[x])return;reverse(ch[x][0]);reverse(ch[x][1]);rev[x]=0;}void rotate(int x)//splay的旋转 {int y=fa[x],z=fa[y],c=son(x);ch[y][c]=ch[x][c^1];if(ch[y][c]) fa[ch[y][c]]=y;fa[x]=z;if(!isroot(y))ch[z][son(y)]=x;ch[x][c^1]=y;fa[y]=x;pushup(y);}void splay(int x)//将x转到根节点 {Stack[top=1]=x;for (int i=x;!isroot(i);i=fa[i])Stack[++top]=fa[i];while (top) pushdown(Stack[top--]);for (int y=fa[x];!isroot(x);rotate(x),y=fa[x])if (!isroot(y)) son(x)^son(y)?rotate(x):rotate(y);pushup(x);}void access(int x)//把x节点到x所在树(连通块)的根节点之间的路径全部变成重路径{for (int y=0;x;y=x,x=fa[x])splay(x),ch[x][1]=y,pushup(x);}void makeroot(int x)//把x节点设为x所在树(连通块)的根节点{access(x);splay(x);reverse(x);}int findroot(int x)//找到x节点所在树(连通块)的根节点{access(x);splay(x);while (ch[x][0]) x=ch[x][0];splay(x);return x;}void split(int x,int y)//抠出x到y的路径,抠完以后y是splay的根{makeroot(x);access(y);splay(y);}void cut(int x,int y)//砍断x到y的边{makeroot(x);if(findroot(y)==x&&fa[y]==x&&!ch[y][0])fa[y]=ch[x][1]=0,pushup(x);}void link(int x,int y)//连接x到y的边{makeroot(x);if(findroot(y)!=x)fa[x]=y;}
}t;
Link-Cut Tree动态树模板相关推荐
- P3690-[模板]Link Cut Tree(动态树)【Splay】
正题 题目链接:https://www.luogu.org/problem/P3690 题目大意 nnn个点mmm个操作,要求支持 询问路径异或和 连接一条边(若x,yx,yx,y没联通) 删除一条边 ...
- Link/Cut Tree学习笔记
最近正是实验课的高峰期,我数了一下,除了毛概没有实验课,其他的课都有实验课...不过好在这些实验都不是很难.我尽力挤出时间用来刷题. 简介 Link/Cut Tree和树链剖分很相似,二者处理的问题也 ...
- 模板:Link Cut Tree(LCT)
文章目录 前言 解析 原理 rotate(x) splay(x) access(x) findroot(x) makeroot(x) split(x,y) link(x,y) cut(x,y) pus ...
- Link Cut Tree 学习笔记
Link Cut Tree 学习笔记 说在前边 最近补 CF 碰见一道 LCT ,就打算学习一下这个东西...顺便复习一下 splay. 具体算法及实现 参考了FlashHu, Candy? P369 ...
- Link Cut Tree详解
Link Cut Tree ==Warning:千万不要跳读== 参考博客:https://www.cnblogs.com/flashhu/p/8324551.html 什么是动态树? 动态树问题, ...
- link cut tree 入门
鉴于最近写bzoj还有51nod都出现写不动的现象,决定学习一波厉害的算法/数据结构. link cut tree:研究popoqqq那个神ppt. bzoj1036:维护access操作就可以了. ...
- 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)
励志用少的代码做高效表达 Problem describe Programmer Rostislav got seriously interested in the Link/Cut Tree dat ...
- luoguP3690 【模板】Link Cut Tree (动态树)[LCT]
题目背景 动态树 题目描述 给定N个点以及每个点的权值,要你处理接下来的M个操作.操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor ...
- Link Cut Tree学习笔记
捋一下思路 模板题:https://www.luogu.org/problemnew/show/P3690 推荐LCT的教程,个人认为很详细,本文做了部分引用:https://www.luogu.or ...
最新文章
- Windows7 64bit VS2013 Caffe test MNIST操作步骤
- 目标检测--Selective Search for Object Recognition(IJCV, 2013)
- Oracle免客户端InstantClient安装使用
- java stack list_JAVA自己实现List接口Stack
- kindeditor和easyui整合出不来
- 12.JAVA基本数据类型
- Intel® Nehalem/Westmere架构/微架构/流水线 (9) - 系统软件增强/能耗增强
- 华为P50系列下月见:珍惜,备货量前所未有的少...
- BERT中CLS效果真的好嘛?这篇文章告诉你答案
- SQL Server执行逻辑查询时,SQL被解析的步骤
- 如何使用USGS下载DEM数据
- 手机modem开发之VoLTE信令
- hive 自定义UDF函数解析HTML
- 解决电脑桌面程序图标变白问题
- 互联网快讯:龙佰集团冲刺港交所;极米Z6X Pro、极米H3S持续热销;京东物流调集3246人增援上海
- 活动通知html代码大全,促销活动通知范文
- c/c++ accumulation
- 【如何开发小程序?】如何快速开发一个小程序
- CSDN 2008英雄大会之“望穿秋水”
- 龙蜥社区理事长展望操作系统 2022:加速驶向快车道,云、XPU和开源成“催化剂”...