支配树 Dominator Tree

写在前面


今天亮神花了一早上给讲了支配树,但由于今天网(没)速(人)不(跟)好(上),我们残忍地看了他一眼后掉线了,于是又用了一下午开流量重新联网并结合缓(课)存(件)学习。

注:本文在原文的基础上加上了作者本人理解,不好勿喷。

就由一道题引入吧。

题目


HDU4694 Important Sisters

简单题意:一个有n个点,m条边的有向图,以n为起点,若去掉点bn就不能连到a,则称baimportant sister,求每个点的所有important sister的编号和。

欸好,这题一看我就不会。

暴力O(n2(n+m)),所以我们需要一个更加优美的算法。进入正题~

定义新名词


支配:

在有向图中,固定起点r,若r~w的每一条路径都必定经过vvw,则v支配w

最近支配点:

v支配w,且w的其余支配点全都支配v,则称vw的最近支配点,记 idom(w)=v

支配树 Dominator Tree

如上图中,idom(a)=ridom(b)=a

半支配点:

若在原图G中有点v有一条路径 v=v0,v1,v2,...vk=w,使得 dfn[vi]>dfn[w] 对于1<=i<=k1 成立 (即不包括点vw,则记 sdom(w)=min(v)

好,上面突然提到 dfn ,解释一下。到了支配树最恶心的地方了

定理、引理、推论及其证明


定理一(支配树定理)

r外都有每个点都有唯一的 idom,且不成环,故所有的 (idom(w),w) 边形成一棵树,v支配w当且仅当v是树中w的祖先,这棵树叫做支配树

支配树 Dominator Tree

有了这个定理,就可以发现 important sisters 这个题目就是求解每个点在支配树上所有祖先的编号之和。只要求出支配树,问题就迎刃而解了。

引入算法

LengauerTarjan 算法: O(nα(n)) 求出所有点的最近支配点,以及半支配点。(读作:兰高娃-塔儿尖算法)然后再等我证会儿再说

引理1(路径引理)

r开始 dfs 整张图,按照 dfs序(即 dfn值)给结点重新编号,得到的树称为搜索树(即后文的T树)。

dfn[v]<=dfn[w] ,则 v~w任意路径都包含在它们在T树中的一个公共祖先

证明:

支配树 Dominator Tree

如图,结点标号即为其 dfn 值,黑边为树边,蓝边为原图边。

(3,2)的两个端点属于r的不同子树(即u不是v的祖先,且v不是u的祖先),那么这样的边就叫做横叉边。

但是,根据 dfs 的顺序我们可以发现,如果原图有边(2,5),那么深搜时就会从2直接走向5,此时标号就会发生变化,故边(2,5)不存在。

由上可知,横叉边只从 dfn 值大的点连向 dfn 值小的点

因为题设中说 dfn[v]<=dfn[w] ,那么不存在从点v到点w,且不经过任何 dfn[i]<dfn[v] 的点i的路径,所以从vw的路径中一定会经过一个dfn值小的点,即它们的一个公共祖先。

引理2

v+>w 表示vwT树中的祖先,且 vw (即完全祖先)。

v·>w 表示vwT树中的祖先,但允许 v=w

则有

idom(w)+>w

证明:

支配树 Dominator Tree

因为 idom(w)每一条r~w的路径上,那就必定在这一条树路径上,所以,必然有 idom(w)+>w

引理3

sdom(w)+>w

证明:

支配树 Dominator Tree

wT树中的父亲为 fa(w) ,则 (fa(w),w) 是原图G中的一条边。因 sdom 的定义,可以发现 fa(w) 符合要求,由 sdom 求的是最小的,那么至少可以有 sdom(w)=fa(w) ,故可得 sdom(w)<=fa(w)<w 。(比较的是 dfn 值)

再有 sdom 的定义得,有一条路径 sdom(w)=v0,v1,v2,...,vk=w 使得 dfn[vi]>dfn[w] 对于 1<=i<=k1 成立。由引理1可知,因为 dfn[sdom(w)]<dfn[w] ,路径上必有某一节点visdom(w)wT树中的公共祖先,即必然有 dfn[vi]<=dfn[sdom(w)] 。这意味着只有使 i=0,即 vi=sdom(w) 才符合。

故有 sdom(w)sdom(w)w 的公共祖先,即 sdom(w)w 的完全祖先。

引理4

对于任意结点 wwridom(w)·>sdom(w)

证明:

支配树 Dominator Tree

由引理2、3得 idom(w)sdom(w) 都是w的完全祖先。

用反证法,假定 sdom(w)·>idom(w) ,则 dfn[sdom(w)<dfn[idom(w)]

我们在从rsdom(w) 的路径后面接上 sdom(w) 中规定的路径 sdom(w)=v0,v1,v2,...,vk=w (见上图)。

这条从rw的路径避开了T树中既是w的完全祖先,也是 sdom(w) 的完全后代(即不等于它自身的后代)的那些点(图中点2),那么我们假定的 idom(w) 就在这些点中。此时从rw的路径没有全部经过点 idom(w) ,不符合 idom 的定义。

因此 idom(w) 不在这些点中,即 idom(w) 一定是 sdom(w) 的祖先。

引理5

若结点vw满足 v·>w,则有 v·>idom(w) 或者 idom(w)·>idom(v)

证明:

xidom(v) 的任意一个完全后代,且同时是v的完全祖先,则必然有一条从rv不经过x的路径(若所有路径全都经过x,则应该 idom(v)=xx不能是 idom(v) 的完全后代)。

将这条路径和从vwT树上的路径连接起来,就得到了一条从rw不经过x的路径。

idom[w] 不能在 idom[v]v 之间(这段之间的路径至少有两条),所以 idom[w] 要么是v的后代,要么是 idom[v] 的祖先。

支配树 Dominator Tree

v·>idom(w) 示例

支配树 Dominator Tree

idom(w)·>idom(v) 示例

好!重头戏来了~

定理2

wr,假设所有使得 sdom(w)+>u·>w 的所有u都满足 sdom(u)>=sdom(w) ,那么 idom(w)=sdom(w)

证明:

由引理4idom(w)·>sdom(w) 可得,我们只要证明了 sdom(w) 支配了w,那么就可以得到 idom(w)=sdom(w)

考虑任意一条从rw的路径,记为p。设x为这条路径上最后一个满足 dfn[x]<dfn[sdom(w)] 的点。

分类讨论。若无此x,则有 sdom(w)=r ,一定支配w。若有x,设y为这条路径上在x之后,满足 dfn[sdom(w)]·>dfn[y]·>dfn[w]第一个点。设路径 q=(x=v0,v1,v2,...,vk=y) 是路径p中从xy的部分。(如图)

支配树 Dominator Tree

(点a只是用来体现 sdom(w) 的,不要在意)

我们断言:对于 1<=i<=k1 均满足 dfn[vi]>dfn[y]

继续大力反证法,我们假定存在有一个i使得 dfn[vi]<dfn[y] 。由引理一得,应当有某个j满足 i<=j<=k1 且点 vj 是点 viy 的公共祖先(即vj·>j)。根据x的选择方式:路径上 dfn[x]<dfn[sedom(w)]最后一点,又因为 vj 在路径上x的后方,那么一定有 dfn[vj]>=dfn[sdom(w)] (即 sdom(w)·>vj )。综合式子,则有 sdom(w)·>vj·>y·>w 。此时 y 就不符合是第一个点这个选择条件了。断言证毕。

x+>y 结合我们对半支配点 sdom(y)+>y 的证明,可以得出 dfn[sdom(y)]<=dfn[x] (最多可以为x)。再联系x选择方式,得 dfn[sdom(y)]<=dfn[x]<dfn[sdom(w)]

再根据断言和点 sdom(w) 一定在路径q上,若 ysdom(w) 那么点 sdom(y) 就应当和点 sdom(w) 重合,不满足 dfn[sdom(y)]<dfn[sdom(w)] 的条件,因此 y=sdom(w) ,且点 sdom(w) 必在路径p上。由于路径p是任意的,故 sdom(w) 支配了w。证毕。

定理3

若有点 wru是所有满足 sdom(w)+>u·>w 的节点中 sdom(u) 最小的那个,那么 sdom(u)<=sdom(w) ,且 idom(u)=idom(w)

证明:

因为至少可以使 u=w ,所以很容易就可以发现 sdom(u)<=sdom(w)

由引理四 idom(w)sdom(w) 的祖先,因此 idom(w) 也是u的完全祖先。

因为 u·>w,再由引理五可知,只能使 idom(w)·>idom(u) 。为了证明 idom(u)=idom(w) ,就应当证明点 idom(u) 就可以支配w

考虑任意一条从rw的路径p,设点x是路径中最后一个满足 dfn[x]<dfn[idom(u)]

基本同定理二的证明思路,如果没有符合要求的点x,则有 idom(u)=r 必然支配w。否则,设点y是路径上x后满足 idom(u)·>y·>w第一个点,设路径 q=(x=v0,vq,v2,...vk=y) 是路径p中从xy的一部分。同理可证,dfn[sdom(y)]<=dfn[x] 。再由引理四 idom(u)·>sdom(u)dfn[idom(u)]<=dfn[sdom(u)] ,结合所有式子得 dfn[sdom(y)]<=dfn[x]>dfn[idom(u)]>=dfn[sdom(u)]

u的选择方式得,为了使udfn 最小的点,y不可能是 sdom(w) 的完全后代,y+>u

假若yu的祖先,也是 idom(u) 的完全后代。我们在rsdom(y)的树上路径后接上使 sdom(y) 成立的那条路径 (sdom(y)=v0,v1,v2,...,vk=y 其中对于 1<=i<k 均满足 dfn[vi]>dfn[y]),再接上从yu的树上路径,就形成了一条从ru而不经过 idom(u) 的路径,矛盾,故不可能y既是u的祖先,又是 #idom(u)$ 的完全后代。

由于 idom(u)·>y+>u·>w ,且 idom(u)·>y·>w ,只能使 y=idom(u) (其实证法和定理二的证明基本一样)。因此, idom(u)(即y)在从rw的任意一条路径上,故 idom(u) 支配w。证毕~(不想配图了qwq)

对比定理二,我们可以发现,使定理二中所有使得 sdom(w)+>u·>wu都满足 sdom(u)>=sdom(w) ,即使 dfn[sdom(u)] 最小的点u满足 sdom(u)>=sdom(w) ,又因为定理三中 dfn[sdom(u)] 最小的点u满足 sdom(u)<=sdom(w)。二者均成立时只能取等,故可将定理二变为:

wr,假设所有使得 sdom(w)+>u·>w 的所有u都满足 sdom(u)=sdom(w) ,那么 idom(w)=sdom(w)

推论

wru是所有满足 sdom(w)+>u·>w 的节点中 sdom(u)的最小者,那么成立:
1、若 sdom(u)=sdom(w) ,则 idom(w)=sdom(w)
2、否则(即 sdom(u)<sdom(w)),idom(w)=idom(u)

这个推论基本就是定理二、三的一个整合,这个推论可以使我们由 sdom 推到 idom,最后就要看怎么得到 sdom 了。

挖坑代填……