题解:洛谷 P5180 【模板】支配树
在图论模拟赛被T4的有向图必经点硬控了 \(10^9 + 7s\),写篇题解纪念一下。
其实,求有向图的必经点,通法就是支配树。
一些定义:
-
支配点:在确定起点 \(S\) 的情况下,对于一个点 \(k\),若存在 \(x\),使得删除 \(x\) 以及与 \(x\) 连接的边后,\(x\) 与 \(k\),不再强连通,那么就称 \(k\) 为 \(x\) 的支配点。
-
支配树:一棵以起点 \(S\) 为根的树,满足对于树上的任意一个点 \(u\),它是它子树内所有点的支配点,且 \(u \rightarrow S\) 这条树链上的点都是 \(u\) 的支配点。
我们发现,其实求出了支配树,那么每个点能支配的点的个数就是它的子树大小,现在考虑如何求出支配树。
我们先对整个图进行一次深搜,求出每个点的 \(dfn\) 序。
定义半支配点为 \(semi_u\),满足从 \(semi_u\) 到 \(u\) 的路径上只走 \(dfn\) 序大于 \(u\) 的点,且 \(dfn\) 序最小的那个点。
定义直接支配点为 \(idom_u\),满足 \(idom_u\) 在支配树上是 \(u\) 的父亲。
首先,每个点的半支配点是唯一的,因为它是所有满足条件的点中 \(dfn\) 序最小的。
我们考虑如何求出半支配点,近而求出直接支配点。
考虑两个点 \(u, v\),其中 \(v\) 与 \(u\) 之间有直接的边相连,那它们的 \(dfn\) 关系只有大于和小于两种情况,如果 \(v\) 的 \(dfn\) 序小于 \(u\),那么 \(v\) 有可能是 \(u\) 的半支配点,
本文来自博客园,作者:JPGOJCZX,转载请注明原文链接:https://www.cnblogs.com/JPGOJCZX/p/18541855