“离线动态连通预先知道每条边的活跃时间,可用时间线段树和 rollback DSU;HDT 不知道未来删除时刻,付出更复杂的分层 replacement 搜索。把离线总时间除以操作数不能得到在…”
时间区间化 ​
预先读取
DFS 不变量 ​
深搜时间树时,在进入节点时把该节点所有边 union 到可回滚 DSU。不变量是:到达代表时刻
若每次 DSU 操作为
另加区间构建成本。
重边例子 ​
同一端点对可能被添加两次再删除一次。若只用端点对作布尔状态,第一次删除会错误地让边完全失活;应按边 ID 配对,或维护每对端点的引用计数并只在计数从 0/到 1 时改变连通图。
模型边界 ​
算法依赖已知未来删除时间,是 offline 而非在线 fully dynamic connectivity。区间端点若混用闭区间,会让删除时刻多保留一轮。它只回答连通性等可由 DSU 合并维护的性质;带删除的最短路不能机械套用。
预处理与空间 ​
扫描操作序列时,为每个边身份保存尚未配对的 add 时间栈;remove 弹出最近匹配时间并产生区间。若语义禁止重复激活,同一边二次 add 应报错而非悄悄覆盖。每个区间在线段树中存
时间分治可不用显式线段树:递归处理中点,把跨越整个子区间的边加入 DSU,其余区间下放孩子。两种写法共享“根叶路径恰含当前活跃边”的不变量,复杂度相同量级。
从操作流生成活跃区间 ​
扫描时间 (min(u,v), max(u,v)) 作为键。add 把当前时刻压入该键的栈,remove 弹出最近一次加入并生成半开活跃区间
每个区间被放进时间 segment tree 的
总复杂度通常写成
参考资料
- David Eppstein et al., Sparsification—A Technique for Speeding Up Dynamic Graph Algorithms, JACM, 1997.
- Erik Demaine, MIT 6.851 Dynamic Graph Algorithms, offline connectivity notes.