支配树
唉唉唉,noi 前不应该学新东西了,但是今天做的题里头有关于支配树的内容,还是简单看看吧。
支配关系
支配关系是定义在有向图上的二元关系,并且需要指定一个点 \(s\) 作为起始节点。
我们称 \(u\) 支配 \(v\),当且仅当,所有从 \(s\to v\) 的路径,都必须经过 \(u\)。
简单分析一下支配关系的性质。
- \(s,u\) 都支配 \(u\)。
这是显然的。
- 如果 \(u\) 支配 \(v\),\(v\) 支配 \(w\),那么 \(u\) 也支配 \(w\)。
证明考虑取一条 \(s\to w\) 的路径,那么这个路径上会出现 \(v\),也就是有一个 \(s\to v\) 的路径,那么这个路径上会出现 \(u\)。
- 如果 \(u\) 支配 \(v\),\(v\) 支配 \(u\),那么 \(u=v\)。
证明考虑取一条 \(s\to v\) 的路径,那么这个路径上会出现 \(u\),也就是有 \(s\to u\) 的路径,那就又会出现 \(v\)。这个过程显然不能无限进行下去。
- 如果 \(u\) 支配 \(w\),\(v\) 支配 \(w\),那么 \(u\) 支配 \(v\) 或者 \(v\) 支配 \(u\)。
考虑取 \(s\to w\) 的路径,显然这个路径上存在点 \(u\) 也存在点 \(v\),不妨假设 \(u\) 在 \(v\) 前面出现。\(s\to u\to v\to w\)。
假设 \(u,v\) 之间不存在支配关系,也就是说,存在一条 \(s\to v\) 而不经过 \(u\) 的路径,那么我们进行一个替换,就说明 \(u\) 并不支配 \(w\)。
这是最重要的性质,有了这个性质,我们就能导出支配树了。
支配树
定义一个点的支配点集 \(dom(u)\) 为能够支配它的点的集合。考虑如何求解支配点集。记 \(pre_u\) 表示 \(u\) 的前驱。
我们定义一个点的直接支配点 \(idom(u)\),为它的支配点集当中,除了 \(s\) 以外,离它最近的。
由支配关系的最后一条性质,我们知道,\(dom(u)=\{v_1,v_2,\dots,v_k\}\) 是可以排序的,也就是说存在路径 \(s\to v_1\to v_2\to\dots\to v_k\to u\),此时显然 \(idom(u)=v_k\)。
把直接支配点当成父亲,生成的树就叫做支配树。
为了求解支配树,接下来我们先看在 DAG 上的例子。
DAG 上的特例
由 \(dom(u)\) 的式子,我们知道可以按照 topo 序依次求解直接支配点,这事实上是它的前驱的 lca。
使用可以动态加叶子的 lca 算法,比如倍增即可。
半支配点
不懂了,好复杂啊,有必要再学吧。

浙公网安备 33010602011771号