Skip to content

动态森林问题

Dynamic forest problem

维护无环树族的 link、cut、连通、换根及路径或子树聚合接口。

条目类型
模型

形式陈述

抽象接口

作为动态图模型的受限接口,结构维护由组成的 represented forest,支持 link(u,v)、cut(e)、connected、find-root,可选 evert、路径聚合与 subtree aggregate。Link 前必须验证端点属于不同树,否则会成环;cut 是按边还是按父子关系也须固定。

例如维护网络骨架上两点路径最大边:link 接入新边,cut 删除故障边,path-max 支持 MST 替换判断。辅助结构可能是 link-cut tree 或 Euler-tour tree,但它不改变外部森林。

直觉

能力边界

路径聚合和子树聚合并不自动等价。Link-cut tree 擅长换根后的路径;Euler-tour tree把子树变连续区间。加入非树边后 represented object 不再是森林,须由外层动态图算法选择生成森林并管理候选替代边。

根是否固定会改变 subtree 语义。复杂度还须注明摊还/最坏及聚合运算是否可逆。

Link 的契约是两端根不同,cut 的边必须存在;否则 represented forest 不变量立刻失效。路径最大值需规定权在边还是点及聚合单位元。Evert 改变父子方向但不改变无向路径,subtree 语义却随根改变,所以支持 path aggregate 不能推出支持 subtree aggregate。

link、cut、路径与子树接口
例子与边界

状态轨迹

初始三棵单点树,link(1,2,w=4)、link(2,3,w=7) 后 connected(1,3) 为真、path-max(1,3)=7。再次 link(1,3) 必须拒绝,因为 find-root 相同;cut(2,3) 后答案变 false。每步 represented forest 的边数等于节点数减分量数。

Evert(3) 把 3 设为根,路径边集合不变,所以 path-max 不变;以原根定义的 subtree(2) 则从包含 3 变成包含 1。任何支持 subtree 的结构必须把根参数或当前朝向纳入状态。

推论与应用

三类实现对应不同的聚合接口。Link–Cut Tree把 preferred path 表示为辅助伸展树,适合 linkcutevert 与路径聚合;Euler Tour Tree把每棵树编码成可分裂合并的 Euler 序列,天然支持连通性和可组合的子树摘要;Top Tree以至多两个边界点的 cluster 分层合并,更对称地承载路径、直径和树上动态规划。选择结构前必须先固定查询是路径型、子树型还是 cluster 型。

聚合维护

路径聚合若为最大值,单位元是 ,反转路径不改变结果;若为非交换字符串拼接,evert 还须维护正反两个摘要。Lazy path-add 要同步更新节点值、路径最大和 tag,不能只改根辅助节点。

Link-cut tree把 preferred paths 存为辅助 splay,擅长路径;Euler-tour tree把每棵树的 tour 存为可 split/join 序列,擅长子树/连通。接口重叠不代表摘要能力相同。

参考资料
  • Sleator, Tarjan, “A Data Structure for Dynamic Trees,” JCSS, 1983.
  • Henzinger, King, dynamic graph framework, STOC 1995.
关系图谱12 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系