关于支配树的一点小感想
边学支配树边写这东西……感觉大家都会支配树了,我怎么才学。
关于支配树的具体建树方法网上讲的够多了,自己讲讲一些关于支配树的理解吧。
支配关系讲的是对于一个流图(就是具有源点 \(S\) 的有向图,满足 \(S\) 可以到达所有点),若 \(x\) 是 \(S\to y\) 的必经点,则称 \(x\) 支配 \(y\),所有支配 \(y\) 的 \(x\) 构成 \(y\) 的支配集。
楼哥博客里面提的很有道理的一点是支配关系的关键性质是传递性。
为了理解这种支配关系,我们可以再复习下偏序的内容:
如果在一个集合 \(S\) 上定义了一个二元关系 \(\preceq\),且这个关系满足:
- 自反性:\(x\preceq x\)
- 反对称性:\(x\preceq y,y\preceq x\Rightarrow x=y\)
- 传递性:\(x\preceq y,y\preceq z\Rightarrow x\preceq z\)
则称这个关系是一个定义在 \(S\) 上的偏序,\(S\) 是一个偏序集。可以理解为在集合上定义了一个不完全的比较运算。
偏序画出来的图一定是一个经过了传递闭包的 DAG。
这是因为如果图中有环,根据传递性,必有 \(x\preceq y,y\preceq x,x\neq y\) 与反对称性矛盾。
偏序图有很多性质,比如说入度减出度按拓扑序递增,这里按下不表。
回到支配树上,为什么支配关系形成了一颗树呢?这个网上几乎没有博客解释,这里讲讲我的想法。
支配关系显然是一个偏序关系,具体地,记 \(x\rightsquigarrow y\) 表示 \(x\) 支配 \(y\)。
若有 \(x\rightsquigarrow y\) 和 \(y\rightsquigarrow z\),那么考虑所有 \(S\to z\) 的路径中一定有 \(y\),那么在 \(y\) 及之前的那部分路径一定是一条 \(S\to y\) 的路径,所以 \(S\to z\) 的这条路径上一定含有 \(x\)。
而反对称性可以这样说明:如果 \(x\rightsquigarrow y,y\rightsquigarrow x,x\neq y\) ,那么 \(S\to x\) 的路径中含有 \(y\),截取前一部分的路径后又是 \(S\to y\) 的路径,所以再前面还有 \(x\),一直推下去这路径就有无限长了矛盾。
可是就算 \(x\rightsquigarrow y\) 构成了偏序图,也不能说明它是树形的。
所以我们还要再证一个性质:
\(x\) 的支配集中任两个元素都是可比的。也就是若 \(y\rightsquigarrow x,z\rightsquigarrow x\) 那么 \(y\rightsquigarrow z\) 或 \(z\rightsquigarrow y\)。
考虑反证,\(x,y\) 不可比说明存在一条 \(S\to z\) 不经过 \(y\) 和存在一条 \(S\to y\) 不经过 \(z\)。
由于 \(y\rightsquigarrow x,z\rightsquigarrow x\),结合上面讲的存在性,也就知道任何一条 \(z\to x\) 都经过 \(y\),和任何一条 \(y\to x\) 都经过 \(z\)。
显然任意一条 \(S\to x\) 最多只能满足上述两个条件之一,矛盾。
这个定理说明了一个点的支配集构成了偏序集上的一条链(或者说全序子集)。容易通过归纳等手段发现偏序图是一颗传递闭包后的外向树。
讲了那么久都没讲怎么建树……事实上我现在也只会 DAG 上建支配树。
DAG 上建支配树可以按拓扑序遍历所有点,一个点的父亲设为其所有有直接连向它的边的点在支配树上的 \(\text{LCA}\)。
事实上由我们刚才的一大堆讨论,我们发现一个点的支配集就是支配树上所有前驱的公共祖先和它本身,也是根到该点的路径上的所有点。
理解了支配树的形态后就可以拿支配树乱搞了。
至于 \(\text{Lengauer-Tarjan}\)……鸽了。