基本概念
支配树
一个有向图 (G),给定一个起点 (s),假设 (s) 能够访问到其他所有顶点。若去掉某点 (i) 后,从 (s) 无法访问到 (j),则称 (i) 是 (j) 的支配点。
支配关系满足传递性,如果 (i) 支配 (j),(j) 支配 (k),那么说明 (i) 支配 (k),证明很简单,因为删掉 (i) 之后 (j) 不能被到达,相当于 (j) 被删掉了,自然 (k) 不能被到达。
根据支配关系的传递性,可以建一棵 (s) 为根的有向树,每个点找到 ( t dfs) 序最大(原图 ( t dfs) 一遍就求出来了)的支配点作为父亲,那么满足每个点的祖先都是他的支配点,这样的树被称为支配树,注意支配树并不一定是 (G) 的树形图。
最近支配点idom
点 (i) 的支配点中 ( t dfn) 最大的点就是 (i) 的最近支配点,用 (idom(i)) 表示
半支配点sdom
理解这个定义至关重要,顶点 (v) 的半支配点 (u) 是符合下列条件的点 (i) 中 ( t dfn) 值最小的点:
- 顶点 (i) 存在一条路径上的顶点(不含端点)的 ( t dfn) 值均大于 (dfn(v))
(v) 的半支配点记为 (sdom(v)),特别的,如果 (u) 和 (v) 直接有边相连,则 (u) 也是 (v) 半支配点的候选点。
性质和定理
约定
如果 (v) 是 (x) 的祖先并且是 (y) 的子节点,那么记 (vin[y,x])
如果要求 (v ot=y),那么记 (vin(y,x])
引理一
(idom(u)) 是 ( t dfs) 树中 (u) 的某个祖先,容易证明。
引理二
(sdom(u)) 是 ( t dfs) 树中的某个祖先,这个引理我好好证一下。
如果 (dfn[sdom(u)]>dfn[u]),那么我们可以把 (sdom[u]) 调整成他的父亲,父亲一定合法并且 ( t dfn) 序会变小所以更优,故这种情况不会出现。
如果 (dfn[sdom(u)]<dfn[u]) 并且 (sdom(u)) 不是 (u) 的祖先,假设我们 ( t dfs) 顺序是从左边的子树到右边的子树的,那么 (sdom(u)) 一定在 (u) 左边的子树,但这和 ( t dfs) 的方式产生矛盾,故这种情况不会出现。
证明了这个结论之后我想补充一下对半支配点的理解。
半支配点也就是提供了另一种根到 (u) 的路径,所以会对支配点产生影响,我们取最浅的有最强的限制。
这东西是支配树的精髓,所以你下面会看到用半支配点去求支配点。
引理三
(idom(u)) 要么是 (sdom(u)) 的祖先,要么是 (sdom(u)) 本身。
好证,因为如果最近支配点在下面的话可以通过 (sdom(u)) 访问到 (u),所以矛盾。
定理一
(forall v ot= s),如果有 (vin(sdom(u),u]) 并且 (dfn[sdom(v)]geq dfs[sdom(u)]),则有 (idom(u)=sdom(u))
根据引理二和三,我们只需要证明 (sdom(u)) 是一个合法的支配候选点即可。那么删掉 (sdom(u)),因为夹在中间的 (v) 就算是另一条路径也要经过 (sdom(u)),所以 (u) 是无法被到达的,证毕。
定理二
设 (v) 是 (dfn[sdom(v)]) 最小的满足 (vin(sdom(u),u]) 的点,如果 (dfn[sdom(u)]>dfn[sdom(v)]),则有 (idom(u)=idom(v))
如果我们删去 (idom(v)) 那么 (xin(sdom(u),u]) 的这些点都不能到达,因为 (idom(v)) 在 (sdom(x)) 之上,那么 (x) 就被切断了道路,所以我们证明了 (idom(v)) 是一个合法的支配候选点。
现在证明 (idom(v)) 是优的候选点,如果删去的点是 (idom(v)) 的儿子那么 (v) 一定能被到达,所以 (u) 就能够到达,这就和 (u) 不能被到达产生矛盾,所以 (idom(v)) 就是 ( t dfn) 序最大的支配点。
推论一