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

    刚开始学lct花了一晚上研究模板,调出来就感觉不怎么难打了。

    对板子的浅显理解:

      lct维护树形联通块,通过splay维护实链,可以把需要的路径变换到一颗splay上维护。

      splay中的关系只依赖实边,一个点最多与两个实边相连,可以有不止两个儿子。也就是说,每个点的贡献由实边传递,必要时重分虚实来合并指定贡献。

       rotate 和 splay 只操作splay树。splay以深度为关键字排序。

       access 和 split 重新划分原树虚实,以重新划分splay的集合。

       makeroot 重新选原树的根,会改变原树父子关系。

       linkcut 对原树修改。

      每次splay节点父子关系变化/访问时,需要 download 或 updata

      lct的用法大概是对一条指定两端的路径进行求和、取min/max以及相应修改,并支持动态改边。把需要的路径split就可以直接访问根节点splay了。对于修改,为了避免从下往上的更新,先把节点splay到顶(splay中的根)再直接修改。

    几点技巧:

      边权变点权:在两端点之间添一个点,其余点不参与贡献。样子和圆方树有点像。

      森林联通数:点数-变数。

    几道题:

    水管局长数据加强版:

      之前模拟赛好像做过类似的题。有一道题用并查集链并,还有一道是线段树分治,具体记不清了。

      这题的意思是寻找一条路径,使得路径上最大的边权最小化,其实是最小生成树。但有动态删边。LCT维护动态加边最小生成树比较容易,查询路径最大值就可以,但是有了删边,最大值难以维护。于是考虑离线,反过来加边就可以了。

    GERALD07加强版:

      一开始有个鬼畜的想法:分块,小块中连$sqrt N$条边,小块之间全连起来,每次把区间两端的小块切断,在连剩下的边。复杂度够呛,空间也开不下。。。

      这题关键在于联通块的计数。先考虑只有树形联通块:点数-变数就是了。如果是图的话,就意味着有些边在一个联通块内是多余的。考虑按序号逐个加边,当一条边的两点已经联通时,记录那条路上标号最小的边t,表示:如果t及之后的边和这条边一起出现,那么这条边就多余了。那么一段区间[l,r]的边的有效边就是t值小于l的边。用主席树维护。

    魔法森林:

      相当于有两维限制的最小生成树,要求边上两元素最大值之和最小化。这类两维限制的题,可以考虑枚举一维,最优另一维。假设最终答案为(a,b),就是说,用A值不大于a的边和b值不大于b的边凑出的答案。我们按A从小到大枚举边,在把B那一维最优化,这样就是一维的最小生成树了。

    在美妙的数学王国中畅游:

      首先动态改边不得不用LCT维护,那么考虑路径贡献总和的维护。对于点上的函数,如果是多项式的话我们就可以把多点的系数加和,最终带入就是贡献总和。那么就要把$sin(ax+b)$和$e^{ax+b}$拟成多项式了,泰勒展开。

      这题大概要展到20阶,少了WA0,多了TLE。一开始对一次函数的系数没有清空以为精度问题卡了半天。

    情报传递:

      虽然并没有找到LCT的做法。

      每个情报员打上相应时间戳,查询操作即为求路径上小于$i-C_i$的点数,就是树上主席树。

      然后有一个naive的想法是用LCT的splay直接查pre,但是这里splay以深度为键值,十分cs。

  • 相关阅读:
    java.util.ConcurrentModificationException故障分析
    Eclipse常见问题总结-持续更新
    MySQL学习—简单存储过程
    Mysql学习——触发器
    MySQL学习—多表查询(内连接,外链接,全连接)
    JDK环境变量配置
    Spring学习总结(二)——容器对Bean的管理
    Spring学习总结(一)——Spring容器的实例化
    类加载机制
    手写数据库连接池
  • 原文地址:https://www.cnblogs.com/Duan-Yue/p/12079454.html
Copyright © 2011-2022 走看看