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