• jzoj5027


    这道题据我所知有4种方法。

    1.莫队。一组询问答案显然是排序相邻的点的lca的深度最小值。

    这种问题在插入时是O(logn)的,因为要快速维护相邻的点(前驱/后继)

    在删除时是O(1)的,直接在链表上删除即可。链表上的前驱/后继也是当前点的前驱/后继。

    可以使用回滚莫队消除一个log。

    2.bitset。暂时不会。

    3.启发式合并。在每个lca处统计贡献。

    每个节点维护它的子树内的后缀代表节点。

    在合并时要处理O(n^2)个询问的答案。且还要扫描线多一个log。

    但是实际上对于每个节点,只有前驱和后继是有用的。所以只需要处理O(n)个询问的答案。

    4.lct。一个暴力的做法是对于每个节点跳到根,统计它到根节点的点的贡献。然后更新它到根节点的标记。

    每个节点记一个标记,表示它被更新过的最晚节点。显然处理这个点时直接把上面的标记更新为当前节点即可。

    这个过程就是lct的access过程,使用lct维护(sdoi树点涂色)

    对于一个节点在跳lca时遇到的一种颜色(标记),则这种标记在一个区间内可以对答案产生贡献。扫描线+线段树维护。

  • 相关阅读:
    SQL Activity Monitor
    Oracle学习计划
    SQL Server 2008 R2下载地址
    聚集索引与非聚集索引的区别
    Android图片加载后变小
    工作手记之Cransoft(四)
    触发器
    Oracle数据库体系架构概要
    html5
    基础概念
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/12938389.html
Copyright © 2020-2023  润新知