讲解博客: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动态树模板相关推荐

  1. P3690-[模板]Link Cut Tree(动态树)【Splay】

    正题 题目链接:https://www.luogu.org/problem/P3690 题目大意 nnn个点mmm个操作,要求支持 询问路径异或和 连接一条边(若x,yx,yx,y没联通) 删除一条边 ...

  2. Link/Cut Tree学习笔记

    最近正是实验课的高峰期,我数了一下,除了毛概没有实验课,其他的课都有实验课...不过好在这些实验都不是很难.我尽力挤出时间用来刷题. 简介 Link/Cut Tree和树链剖分很相似,二者处理的问题也 ...

  3. 模板:Link Cut Tree(LCT)

    文章目录 前言 解析 原理 rotate(x) splay(x) access(x) findroot(x) makeroot(x) split(x,y) link(x,y) cut(x,y) pus ...

  4. Link Cut Tree 学习笔记

    Link Cut Tree 学习笔记 说在前边 最近补 CF 碰见一道 LCT ,就打算学习一下这个东西...顺便复习一下 splay. 具体算法及实现 参考了FlashHu, Candy? P369 ...

  5. Link Cut Tree详解

    Link Cut Tree ==Warning:千万不要跳读== 参考博客:https://www.cnblogs.com/flashhu/p/8324551.html 什么是动态树? 动态树问题, ...

  6. link cut tree 入门

    鉴于最近写bzoj还有51nod都出现写不动的现象,决定学习一波厉害的算法/数据结构. link cut tree:研究popoqqq那个神ppt. bzoj1036:维护access操作就可以了. ...

  7. 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)

    励志用少的代码做高效表达 Problem describe Programmer Rostislav got seriously interested in the Link/Cut Tree dat ...

  8. luoguP3690 【模板】Link Cut Tree (动态树)[LCT]

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

  9. Link Cut Tree学习笔记

    捋一下思路 模板题:https://www.luogu.org/problemnew/show/P3690 推荐LCT的教程,个人认为很详细,本文做了部分引用:https://www.luogu.or ...

最新文章

  1. Windows7 64bit VS2013 Caffe test MNIST操作步骤
  2. 目标检测--Selective Search for Object Recognition(IJCV, 2013)
  3. Oracle免客户端InstantClient安装使用
  4. java stack list_JAVA自己实现List接口Stack
  5. kindeditor和easyui整合出不来
  6. 12.JAVA基本数据类型
  7. Intel® Nehalem/Westmere架构/微架构/流水线 (9) - 系统软件增强/能耗增强
  8. 华为P50系列下月见:珍惜,备货量前所未有的少...
  9. BERT中CLS效果真的好嘛?这篇文章告诉你答案
  10. SQL Server执行逻辑查询时,SQL被解析的步骤
  11. 如何使用USGS下载DEM数据
  12. 手机modem开发之VoLTE信令
  13. hive 自定义UDF函数解析HTML
  14. 解决电脑桌面程序图标变白问题
  15. 互联网快讯:龙佰集团冲刺港交所;极米Z6X Pro、极米H3S持续热销;京东物流调集3246人增援上海
  16. 活动通知html代码大全,促销活动通知范文
  17. c/c++ accumulation
  18. 【如何开发小程序?】如何快速开发一个小程序
  19. CSDN 2008英雄大会之“望穿秋水”
  20. 龙蜥社区理事长展望操作系统 2022:加速驶向快车道,云、XPU和开源成“催化剂”...

热门文章

  1. 解决方案 | python安装wordfreq库
  2. led大屏按实际尺寸设计画面_Micro LED电视:模块化的设计思路,能实现16K巨幕
  3. 已经被处理的消息不能丢
  4. 线程池原理与自定义线程池
  5. OAuth2.0在项目中的应用
  6. JDK7的六个新特性回顾和讲解
  7. DataURL:概述
  8. aop实现原理-动态代理CGLib代理
  9. java中ArrayList和LinkedList的区别
  10. 泛微文档存放在服务器哪个地址,泛微OA根据文档的docid查询文档附件存放的路径...