支配树笔记

鉴于原论文对半支配点的定义有点抽象,本文在不引入半支配点的概念下介绍支配树及所求算法。


定义1.1:在一张有向图中,给定起点s,若删除点x后,s无法到达yxy),则称xy支配点,也称x支配yyx支配。特别的,s是除自身外所有点的支配点。

观察1.1:若x支配yy支配z,则x支配z

观察1.2:支配关系不会出现环。

观察1.3:若z同时被x,y支配,则x,y间存在支配关系。

证明:
若假设y不支配xx不支配y,但z同时被x,y支配
对于任意一条到z的路径,由对称性不妨设路径先经过x再经过y,那么我们得到一条从y出发不经过x到达z的路径,由假设知存在一条由s出发不经过x到达y的路径,将两条路径合并得到一条从s出发不经过x到达z的路径,则x不支配z,与假设矛盾。

定义1.2:根据观察1.2观察1.3,除s外的每个点x,必定存在支配点(s支配所有点),且支配点集里存在某个点y被集合中的其他所有点支配,若我们将该点为x的父亲,则可以建议一棵以s为根的有根树,我们将这棵树称为支配树


考虑如何求DAG的支配树。

观察2.1x在支配树上的父亲,为所有在DAG中能直接到达x(即{y|(y,x)E})的点在支配树上的LCA

证明:
|{y|(y,x)E}|=1,则显然x父亲为y
|{y|(y,x)E}|>1,则支配x的点也必然支配所有的y

故我们可以求该图的拓扑序,然后按拓扑序逐步建支配树。


下面观察一般有向图的一些性质。

观察3.1:对于任意dfs树,x的支配点一定为x的祖先。

定义3.1:对于某棵dfs树,[x,y]表示xy最短路径的点集,(x,y)表示xy最短路径不包括x,y的点集。

定义3.2:对于x的祖先y,若存在从y出发不经过(y,x)到达x的路径,则称y满足条件,令所有满足条件的y中深度最小的为sdom(x)

s外任意点均存在sdom(x),因为在dfs树上的父亲一定满足条件。

观察3.2(sdom(x),x)中任意点不是x的支配点。

证明:
我们可以构造出从s出发不经过(sdom(x),x)中任意点到达x的路径:s沿树边到达sdom(x),由定义可知存在从sdom(x)出发不经过(\text{sdom(x)},x)而到达x的路径,将两条路径接上即可。

观察3.3:对于x的某个祖先z,不被(sdom(x),x)包含,且不被任意x的祖先y(sdom(y),y)包含,是zx支配点的充要条件。

证明:
假设z被某个包含了,则必定不为支配点。
否则,假设z未被任何包含,且不为x的支配点,一定存在从sx不经过z的路径s=v0,v1,,vm=x,这条路径中一定存在vk1,vk2k1<k2)为x的祖先,满足i(k1,k2),vi均不为x的祖先且vk1,vk2dfs树中的路径包含z,则sdom(vk2)一定为vk1或其祖先,则(sdom(vk2),vk2)包含z,与z未被包含矛盾。

若我们得到了所有的{sdom(i)},那么求支配树父亲将非常简单,下面介绍如何求{sdom(i)}


先探究{sdom(i)}的性质

假设sdom(x)x不经过(sdom(x),x)的路径中的最后一条边为(y,x),那么有两种情况。
1)yx的祖先。
2):最后一条边为横插边或后向边。

对于1),则此时sdom(x)=y
对于2),不妨设此路径为sdom(x)=v0,v1,,vm1=y,vm=x,设路径中第一个位于(LCA(x,y),y]中的点vk,一定有sdom(vk)=sdom(x),而此路径中其他位于(LCA(x,y),y]中的点sdom的深度一定大于等于sdom(vk)的深度。

证明:
sdom(vk)sdom(x),由于存在以上路径,sdom(vk)的深度一定小于sdom(x),此时sdom(vk)也为x的祖先,由于存在sdom(vk)vk不经过(sdom(vk),vk)的路径,此路径必定不经过(sdom(x),x),该路径再依次接vk+1,,vm即可得到从sdom(vk)x不经过(sdom(vk),x),与sdom(x)定义矛盾,故sdom(vk)=sdom(x)
若对于此路径中其他位于(LCA(x,y),y]中的点l,若sdom(l)深度小于sdom(vk),即sdom(x),我们仍然可以构造出从sdom(l)到达x不经过(sdom(l),x)的路径,与sdom(x)定义矛盾。

由以上,我们得到求sdom(i)的算法

枚举(y,x)
1)yx的祖先,用y更新sdom(x)
2)y不为x的祖先,设zLCA(x,y),用(z,y]中点的sdom更新sdom(x)

易知2)dfn(y)>dfn(x),对dfn倒序更新sdom

posted @   Grice  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
历史上的今天:
2020-07-25 North America Championship 2020
点击右上角即可分享
微信分享提示