2018.06.26 Dominator Tree--支配树

在学习支配树之前,请保证已经会写lca(tarian求法)

简介

支配树是什么?支配树能干什么?

  • 对于一个DAGDAG上的每个点ww,都存在点dd满足去掉dd之后起点无法到达ww,我们称作dd支配wwddww的一个支配点。TT中节点uuuu子树中所有节点的支配点(必经点),
  • 支配ww的点可以有多个,但是至少会有一个。显然,对于起点以外的点,它们都有两个平凡的支配点,一个是自己,一个是起点。
  • 在支配ww的点中,如果一个支配点iwiwi≠wi≠w满足iiww剩下的所有非平凡支配点支配,则这个ii称作ww的最近支配点(immediatedominator)(immediatedominator),记作idom(w)idom(w)

如果我们把图的起点称作ss,那么除ss以外每个点均存在唯一的idomidom。于是,连上所有rr以外的idom(w)widom(w)widom(w)→widom(w)→w的边,就能得到一棵树,其中每个点支配它子树中的所有点,它就是支配树。

下面我们来考虑一个问题:给定一个起点ss和一个终点tt,询问删掉哪些点能够使ss无法到达tt

不难发现,支配点与割点并不相同,我们可以用某位大佬的图证明这一观点
反例
显然在这种情况中即使我们割掉割点依然能使ss走到tt点。所以我们没有办法使用割点来解决这个问题。
那么我们如何处理这个问题呢???

如果该DAGDAG是一棵树,那没什么好说的,显然有fa[u]==idom[u]fa[u]==idom[u],那么路径s>vs−>v上的点都应该是支配点,直接OnO(n)解决了

如果不是树该肿么办?我们考虑用拓扑序建立支配树:
由于我们是根据拓扑序来进行处理的那么当我们处理到第ii个节点uu时,第11~i+1i+1个节点显然已经处理完了,对于所有能够直接到达点uu的节点,我们求出它们在支配树上的lcalca vv,这个点vv就是点uu在支配树上的父亲。
如果使用倍增求lcalca,那么O((n+m)log2n)O((n+m)log2n)的时间内实现。

转载于:https://www.cnblogs.com/ldxcaicai/p/9738583.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值