zoukankan      html  css  js  c++  java
  • splay/LCT总结

    splay:

      单纯splay的话,如果不要求第k大,或者求rank,基本都可以用set代替了。。

      几个套路:

        1.为了简化代码,也避免RE,大部分 题目都可以在建树时,先建一个空的起点和空的终点,然后在ch[ch[rt][1]][0]这个key_pos位置根据原序列建树。这样做的话在find_kth时候要特别注意k要++

        2.其实不管是区间修改还是点修改,都可以把要修改的部分转到key_pos,然后直接打标记就好了。这里的标记和线段树的标记还是有那么一丢丢 不一样的。。这里的标记是打在一个点上,线段树是把               整个区间都标记了。可能需要画图自己理解

        3.序列很长的时候,往往需要离散化。要考虑哪些点是在操作过程中会单独拿出来。比如删除某个点,就必须把这个点单独拿出来。其它的操作即使是询问,不单独拿出来也是不要紧的其实

        4.大部分操作完毕(比如插入)记得把对象结点旋转到根。这也算是复杂度的保证(玄学)

    LCT:

      其实用来维护森林的连通性的数据结构

      1.结点0的初始化很重要,要考虑清楚

      2.初始化的时候可以把所有边都设置成轻边。之后的操作会将需要的边变成重边,所以也不太需要担心复杂度的问题(这种东西的复杂度不都是口口相传,还都是玄学)

      3.路径操作都是先make_rt一个点,然后再access另一个点,那整条路径就用一整棵splay维护起来了,打个标记或者直接从根那需要的信息就完事啦

      4.对于一个基环森林,可以先拆掉一条边(u,v)。则可以把v作为这棵树的根,u记为v的special father。操作的时候要多考虑spf的影响

  • 相关阅读:
    Java中抽象类和接口的区别
    servlet的转发与重定向
    JSP知识点
    过滤器与拦截器
    java关键字 super 和 this
    oracle 基础
    java 集合
    java 内部类
    java 数组详解
    图,深度优先遍历与广度优先遍历
  • 原文地址:https://www.cnblogs.com/luxiaoming/p/6919883.html
Copyright © 2011-2022 走看看