[转]LCT讲解
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其实就是线段树、平衡树的延伸。
--------------------- 
作者:wwyx2001 
来源:CSDN 
原文:https://blog.csdn.net/Blue_CuSO4/article/details/78618811 
版权声明:本文为博主原创文章,转载请附上博文链接!
[转]LCT讲解的更多相关文章
- 【模板篇】Link Cut Tree模板(指针)
		网上一片一片的LCT都是数组写的 orz 用指针写splay的人想用指针写LCT找板子都不好找QAQ 所以能A题了之后自然要来回报社会, 把自己的板子丢上来(然而根本没有人会看) LCT讲解就省省吧, ... 
- Link-Cut Tree(LCT)&TopTree讲解
		前言: Link-Cut Tree简称LCT是解决动态树问题的一种数据结构,可以说是我见过功能最强大的一种树上数据结构了.在此与大家分享一下LCT的学习笔记.提示:前置知识点需要树链剖分和splay. ... 
- 动态树之LCT(link-cut tree)讲解
		动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作.其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT( ... 
- LCT模板(无讲解)
		怎么说呢,照着打一遍就自然理解了,再打一遍就会背了,再打一遍就会推了. // luogu-judger-enable-o2 #include<bits/stdc++.h> using na ... 
- 平衡树及笛卡尔树讲解(旋转treap,非旋转treap,splay,替罪羊树及可持久化)
		在刷了许多道平衡树的题之后,对平衡树有了较为深入的理解,在这里和大家分享一下,希望对大家学习平衡树能有帮助. 平衡树有好多种,比如treap,splay,红黑树,STL中的set.在这里只介绍几种常用 ... 
- Luogu 3690 LCT - 模板
		推荐几篇比较好的博客: FlashHu 的 讲解比较好 : 传送门 Candy 的 代码~ : 传送门 以及神犇Angel_Kitty的 学习笔记: 传送门 Code V 模板 #include< ... 
- Lct浅谈
		Lct浅谈 1.对lct的认识  首先要知道$lct$是什么.$lct$的全称为$link-cut-tree$.通过全称可以看出,这个数据结构是维护树上的问题,并且是可以支持连边断边操作.$lct$ ... 
- LCT 学习笔记
		LCT学习笔记 前言 自己定的学习计划看起来完不成了(两天没学东西,全在补题),决定赶快学点东西 于是就学LCT了 简介 Link/Cut Tree是一种数据结构,我们用它解决动态树问题 但是LCT不 ... 
- bzoj 2049: [Sdoi]Cave 洞穴探测 (LCT)
		第一次写lct (这是一道lct裸题 这次没有可爱(划掉)的同学教我,虽然有模板,但是配合网上的讲解还是看不懂QAQ 然后做了几道题之后总算有些感觉辣 于是决定给自己挖个坑,近期写一个lct详解(不过 ... 
随机推荐
- HTML5 快速学习一
			关注HTML5有一段时间了,一直没系统的去学习过. 对于HTML5的理解,之前停留在一些新的标签,一些api可以完成部分js完成的事情,仅此而已. 前段时间HTML5定稿了,看了一些这方面的报道,进行 ... 
- Java基础-hashMap原理剖析
			Java基础-hashMap原理剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是哈希(Hash) 答:Hash就是散列,即把对象打散.举个例子,有100000条数 ... 
- 2018年11月25日ICPC焦作站参赛总结
			可能就这么退役了吧. 对这次ICPC还是比较有信心的,毕竟心态都放平和了. 路途很波折,热身赛还是赶上了. 等到了正赛的时候,开场看出了A题的签到,签到肯定是我来签的,11分钟签完了这道题之后,开始看 ... 
- 一个Zabbix agent配置多个Zabbix Server
			环境说明: 公司和政府合作的项目中,需要对服务器添加监控.政府方面已对服务部署了zabbix agent,实现了系统层面的基础监控:而对于公司而言,需要对服务器上的服务进行监控,故需在原有的zabbi ... 
- Nginx ab压力测试
			20-ab压力测试及nginx性能统计模块 优化的启发,打开的文件太多 Nginx 错误日志显示,打开文件数太多 系统层面 more /proc/sys/net/core/somaxconn 单个Ng ... 
- Java Web之路(二)Servlet之HttpServletResponse和HttpServletRequest
			HttpServletResponse 1.告诉服务器应用使用UTF-8解析文本的两种方式,告诉客户端要使用什么编码 response.setHeader("content-type&quo ... 
- js调试系列: 调试基础与技巧
			js调试系列目录: - 昨天我们见识到了断点的强悍,在断点的配合下进行动态调试,让读代码变的轻松不少,特别是ajax之类的.在昨天的课后练习中,确实增加了不少难度,因为 提交评论 按钮是用 jQuer ... 
- 跨域请求:JSONP
			在JavaScript中,有一个很重要的安全性限制,被称为"同源策略".即JavaScript只能访问与包含它的文档在同一域下的内容.然而,当进行一些比较深入的前端编程的时候,不可 ... 
- 第7月第20天 epoll
			1. ) { struct sockaddr in_addr; socklen_t in_len; int infd; char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; ... 
- Nessus扫描策略
			本篇将简单介绍下Nessus的扫描策略设置.选用plugins及如何使用定制的策略来进行扫描任务. Step 1: 启动Nessus服务 root@kali:~# /etc/init.d/nessus ... 
