支配树

唉唉唉,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\) 的前驱。

\[dom(u)=\{u\}\cup\big(\bigcap_{v\in pre(u)}dom(v)) \]

我们定义一个点的直接支配点 \(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 算法,比如倍增即可。

半支配点

不懂了,好复杂啊,有必要再学吧。

posted @ 2024-06-18 20:31  PYD1  阅读(11)  评论(0)    收藏  举报