Skip to content

离线动态连通

offline dynamic connectivity

把边的活跃时间区间分配给时间线段树,并用可回滚并查集回答离线连通查询。

条目类型
算法

形式陈述

从操作流生成活跃区间

目标是在无向图的 add、remove、query 操作序列上回答连通查询,并且全部 q 个操作预先可见。扫描时间 0,,q1,对每个带身份的边保存尚未配对的 add 时刻栈;若边没有外部 ID,可用规范端点 (min(u,v), max(u,v)) 作为键,并让栈区分同端点重边。

add 把当前时刻压栈,remove 弹出匹配的 add 时刻并产生半开活跃区间 [tadd,tremove);扫描结束仍未删除的边产生 [tadd,q)。若接口禁止同一边重复激活,第二次 add 应直接报错,不能悄悄覆盖第一次的开始时间。

把每个活跃区间分解为时间线段树O(logq) 个规范节点。节点存放在它所代表的整个时间段内持续活跃的边;一条边可能出现在多个互不重叠的规范节点中,但任一时刻的根叶路径恰好覆盖它一次。

DFS 与回滚不变量

深搜时间树时,进入节点前记录可回滚并查集快照,再把该节点的所有边 union。到达代表时刻 t 的叶子时,并查集恰含根叶路径上全部边,也就是 t 时的活跃图;此时用 Find 回答 query。离开节点前回滚到快照,保证一个时间分支的边不会泄漏到兄弟分支。

若产生 a 个活跃区间,每个区间进入 O(logq) 个节点。使用按大小合并、无路径压缩的 rollback DSU 时,Find 与 union 最坏 O(logn),总时间为

O((alogq+q)logn),

另加线性扫描和区间构建成本。最后一个 logn 来自可回滚并查集的树高;简写为 O(qlog2q) 会隐含 a,n=O(q),并掩盖重边产生的区间数。

直觉

删除之所以难,是因为普通并查集只会合并,不能把一条旧边从当前状态抽走。离线视角把“边何时存在”提升为一条时间区间:时间树把区间拆成若干完整覆盖块,DFS 进入块时加入边、离开块时撤销。于是数据结构始终只做擅长的合并与栈顶回滚,却能在每个叶子重现那个时刻的整张活跃图。

分治和线段树是同一时间递归的两种写法。显式线段树先保存规范节点;递归写法在区间中点处分配覆盖整个子问题的边,再把其余区间下放两个孩子。两者共享“根叶路径恰含当前时刻所有活跃边”的不变量。

活跃区间、时间树与回滚 DSU
例子与边界

重边与引用计数

同一端点对可能连续添加两次,再只删除一次。若把端点对当作布尔状态,第一次删除就会错误地让边完全失活。可以按边 ID 分别配对,也可以维护端点对引用计数:计数从 0 变为 1 时开始一段连通图活跃区间,从 1 变为 0 时才结束;中间的增加和减少不改变“至少有一条边存在”这一连通事实。

采用栈配对时,remove 应弹出最近一次未匹配 add。若操作语义指定特定边 ID,就必须按该 ID 删除,不能用任意 LIFO 配对代替。删除不存在的边、扫描结束仍有未配对 add,以及闭区间/半开区间混用,都应在预处理阶段明确处理。

模型边界

算法依赖预先知道未来删除时刻,是 offline 方法,不是在线 fully dynamic connectivity。半开区间 [l,r) 确保边在 remove 时刻已经失效;若误用闭区间,会多保留一次查询。该框架适合连通分量数、二分图 parity 等能随 union 增量维护且可回滚的摘要;带删除最短路没有同样的合并不变量,不能机械套用。

推论与应用

预处理保存每个边身份的 add 栈、a 个活跃区间和时间树节点列表,总空间为 O(alogq+q+n);DFS 同时存在的 DSU 历史只对应当前根叶路径上的成功合并与附加摘要。若每个分量还维护大小、奇偶势或权重和,union 时必须把所有被覆盖字段一并压入回滚记录。

离线动态连通常作为“时间分治 + 可撤销状态”的标杆:同一结构还能处理区间生效约束、批量版本验证和某些离线二分图查询。若更新必须到来即答,或需要最坏/摊还多对数更新时间,则要转向 Euler-tour tree、link-cut tree 或分层动态森林等在线结构;这些算法不能从本页的预知未来假设直接推出。

参考资料
  • David Eppstein, Zvi Galil, Giuseppe F. Italiano, and Amnon Nissenzweig, “Sparsification—A Technique for Speeding Up Dynamic Graph Algorithms,” Journal of the ACM 44(5), 1997, pp. 669–696.
  • Erik D. Demaine, Advanced Data Structures, MIT 6.851, Spring 2012, lecture notes on dynamic graphs, persistence, and rollback.
关系图谱7 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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