zoukankan      html  css  js  c++  java
  • [转]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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Python 异常处理
    Python File(文件) 方法
    python 文件定位
    globals() 和 locals() 函数
    python dir()函数
    python from…import* 语句
    python from…import 语句
    Python 模块
    python 匿名函数
    python 函数参数
  • 原文地址:https://www.cnblogs.com/lyp-Bird/p/10349718.html
Copyright © 2011-2022 走看看