SPLAY,LCT学习笔记(四)
前三篇好像变成了SPLAY专题... 这一篇正式开始LCT! 其实LCT就是基于SPLAY的伸展操作维护树(森林)连通性的一个数据结构 核心操作有很多,我们以一道题为例: 例:bzoj 2049 洞穴勘测 要求:加边和删边,询问连通性 其实如果没有删边,裸跑并查集似乎就可以搞定 但由于存在删边,并查集思想受阻,我们要考虑更高级的数据结构 于是LCT横空出世! LCT的核心思想:多棵SPLAY维护虚实树链 首先介绍一下树链剖分问题: 树链剖分问题是将一棵树划分成多条树链的思想,有很多种剖分方法,比如轻重树链剖分(最常见,最常用),长短树链剖分(在部分题目中可以替代树上的dsu算法,而且无论码量还是时间复杂度都是很优越的),以及LCT要使用的虚实树链剖分 所谓虚实树链剖分,就是讲一棵树的边划分为实边和虚边,对于实边连起来的一条链用一个SPLAY维护 举个例子: 这是一棵树( 废话 ) 我们对他进行一下虚实剖分,如下: 如图,用实线表示的是实边,用虚线表示的是虚边,而我们用一些SPLAY维护这些链,就是: 如图,用黑色实线连起来的点表示一个SPLAY,用黑色虚线框圈起来的是一个SPLAY,用蓝色虚线连的边表示父亲指针 为什么要这样建立SPLAY? LCT维护树链的SPLAY有一个原则:每棵SPLAY的中序遍历会产生一个序列,而这个序列所对应的树链深度是单调递增的! 这是很重要的一个性质