引子

—–摘自PoPoQQQ&&优秀的学姐

『LCT能干嘛』

(1)维护一个序列,支持下列操作:
区间求和
区间求最值
区间修改
求连续子段和
这个线段树就可以解决 具体做法不加累述了
(2)维护一个序列,支持下列操作:
区间求和
区间求最值
区间修改
求连续子段和
添加一段区间
删除一段区间
翻转一段区间
Splay的基本操作
(3)维护一棵树,支持下列操作:
链上求和
链上求最值
链上修改
子树修改
子树求和
树链剖分!!!
(4)维护一棵树,支持下列操作:
链上求和
链上求最值
链上修改
断开树上的一条边
连接两个点,保证连接后仍然是一棵树
由于树是动态的,我们不能每次操作都重标号一遍 树链剖分搞不了了
然而我们可以沿用树链剖分的轻重链剖分的概念
既然是动态那么我们肯定要把静态的线段树换成动态的Splay
于是就有LCT≈树链剖分+Splay

『引入一些概念』

Preferred Child:重儿子,重儿子与父亲节点同在一棵Splay中,一个节点最多只能有一个重儿子
Preferred Edge:重边,连接父亲节点和重儿子的边
Preferred Path:重链,由重边及重边连接的节点构成的链

『Auxiliary Tree(辅助树)』

由一条重链上的所有节点所构成的Splay称作这条链的辅助树
每个点的键值为这个点的深度
辅助树的根节点的父亲指向链顶的父亲节点,然而链顶的父亲节点的儿子并不指向辅助树的根节点
(儿子认爹&&爹不认儿子)
原树中的重链 -> 辅助树中两个节点位于同一棵Splay
原树中的轻链 -> 辅助树中子节点所在Splay的根节点的father指向其父节点
注意原树与辅助树的结构并不相同

那么切入正题咯

那么LCT中最重要的操作可以说是….

『Access操作』

目的:将x的重边切断,并将x到根的路径上所有的边都搞成重边。
具体实现:根据辅助树按照深度为关键字的性质。不断地将一个结点的父亲转到根,然后把这个结点接到它父亲的右儿子,此时要切断x下面的所有重边


『Reverse操作』

目的:将原树中的x结点转到根。
具体实现:因为原树是虚树,所以在原树中进行变换实际上是在辅助树中进行变换。首先Access一个点,再将这个点在辅助树中转到根。又是根据辅助树按照深度为关键字的性质,将这个点所在的splay树反转,实际上改变了深度的关系,也就是实现的原树的换根。



那么知道这两个之后其他的都是小菜咯

『Link操作』

目的:将两个不连通的点连通。换句话来说,合并或扔到一颗树里。
具体实现:首先进行Reverse操作,在原树中将一个点转到那个点所在的树的根。然后将这个转到根的点的father接到另外一个点上。可以进行一次splay来update。

『Cut操作』

目的:将两个连通的点不连通,换句话说,把一棵树拆成两棵树。
具体实现:首先进行Reverse操作,在原树中将一个点转到那个点所在的树的根。然后Access另外一个点,把另外一个点在辅助树中转到根。由于这两个点原先是连通的,那么进行Access操作之后两个点在辅助树中一定是一个位于根,一个位于根的左儿子(深度)。所以在辅助树中把这个边砍掉就行了。

『Find操作』

目的:寻找一个点在原树中的根。
用于:判断两个点的连通性。
具体实现:首先Access这个点,然后在辅助树中将这个点转到根,由于辅助树按照深度为关键字排序,所以不断地向左子树寻找,就可以找到深度最小的根。

差不多就这些啦,还有一些奇怪的求和啊,维护最大值最小值什么的和线段树平衡树等数据结构基本一样。也难怪,LCT其实就是线段树、平衡树的延伸。

以后的题目训练博主会渐渐发到blog里哦,期望资瓷!

史上最详尽的LCT讲解相关推荐

  1. DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)

    DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~) --- --- 前言: 虽然以前对批处理也算有点研究,但一直对for命令理解不够透彻,偶尔用时也是照猫画虎的用一下. 虽然 ...

  2. 史上最清晰的函数空间讲解

    史上最清晰的函数空间讲解 1.什么是数学的空间? 数学的空间定义了研究工作的对象和遵循的规则,研究工作的对象在空间中称之为元素,遵循的规则在空间中称之为结构,结构有线性结构(加法和数乘)和拓扑结构(距 ...

  3. 史上最全电子元器件知识讲解

    史上最全电子元器件知识讲解 2016-05-10 半导体行业观察 芯榜(IC行业排行榜) 芯榜 - IC服务平台,用数据读懂芯片业. 转载于:https://www.cnblogs.com/sunny ...

  4. 史上最详尽的平衡树(splay)讲解与模板

    首先声明:万分感谢gty大哥的帮助!这年头能找到简单易懂的数组版平衡树模板只能靠学长了! 变量声明:f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子,key[i] ...

  5. 史上最全ajax全套讲解

    博客好久没有更新文章,主要最近在做一个聊天的功能,虽然不是很尽人意,但是最起码实现了功能.其中里面用到最多的就是数据交互问题了.所以ajax自然是最好的选择了. 话说我从没有有系统的学习Ajax过,每 ...

  6. 史上最全的ECharts讲解与使用

    首先搞清楚,什么是ECharts? ECharts,一个使用 JavaScript 实现的开源可视化库. ECharts支持数据类型 支持直接传入包括二维表,key-value 等多种格式的数据源.常 ...

  7. 史上最详细Flutter 动画讲解

    1. 动画介绍 动画对于App来说,非常的重要.很多App,正是因为有了动画,所以才会觉得炫酷.移动端的动画库有非常的多,例如iOS上的Pop.web端的animate.css.Android端的An ...

  8. FastJson小技巧——@JSONField的史上最全最详细讲解——一看就会

    常见:使用fastjson进行需要对字段进行一些特殊处理,比如时间格式,前后端名字不一致,字段为null是否依然序列化等问题.那么fastjson的@JSONField就能很好的解决这些问题. @JS ...

  9. 高并发系列:存储优化之也许可能是史上最详尽的分库分表文章之一

    趣味性不强,但知识性很强,建议耐心看或者先收藏 本文内容预览: 库表会在哪天到达瓶颈? 1.1 苏宁拼购百万级库表拆分之前 1.2 京东配运平台库表拆分之前 1.3 大众点评订单库拆分之前 1.4 小 ...

最新文章

  1. PCL中3D特征描述子Shot详解
  2. 程序员的十种级别 看看自己属于哪个级别?
  3. EOS 核心功能 (2) nodeos
  4. HDU 5389 Zero Escape
  5. java程序启动命令_如何用java启动windows命令行程序
  6. Win7 Ubuntu13.04互通(win7下用vbox安装Ubuntu)
  7. 41%的网络保险理赔和勒索软件有关
  8. 使用include实现布局(layout)复用
  9. 用session监听实现在线统计
  10. java odbc 驱动_Java java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序...
  11. Micropython加速物联网开发4 - SPI驱动5110LCD屏
  12. 5.4 图层样式面板的实例讲解 [原创Ps教程]
  13. 国内访问英文版维基百科地址
  14. 笔记本如何解除锁定计算机,笔记本电脑数字小键盘如何解锁_笔记本电脑数字键盘被锁定了如何打开-win7之家...
  15. java中的subtract_【java】Java.math.BigDecimal.subtract()方法实例
  16. 女程序猿做了个梦,各路大神惊现神级评论!
  17. seo伪原创文章优化(怎么找可以做伪原创的文章)
  18. 京东DPG图片压缩调研
  19. uni-app学习笔记之判断当前用户是否拥有某角色和权限
  20. Nginx之父被抓!员工“接私活儿”到底合不合法?

热门文章

  1. JavaScript-GET请求方式
  2. C实现的多项式拟合函数
  3. 运用爬虫和分词库统计nga某板块标题词频
  4. 阿里云镜像站搜索功能,提供仓库软件包快速搜索下载
  5. Linux安装Oracle12c数据库图文详解
  6. 极兔快递单号查询 快递鸟API接口对接指南-极兔速递
  7. java中的实例变量
  8. 云上资源编排的思与悟
  9. 【HTML、CSS练习题1】
  10. 解决ssh过程中报Too many authentication failures