码迷,mamicode.com
首页 > 其他好文 > 详细

tarjan求割点割边的思考

时间:2017-12-03 13:56:36      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:class   就是   www.   算法   有向图   min   math   隔离   技术   

这个文章的思路是按照这里来的。这里讨论的都是无向图。应该有向图也差不离。

1.如何求割点

首先来看求割点。割点必须满足去掉其以后,图被分割。tarjan算法考虑了两个:

  • 根节点如果有两颗及以上子树,它就是割点。因为它没有父亲了(可怜的点)。

  • 对于有父亲的普通的结点a,如果它递归树的子树中,有任意节点b的low[b]>=dfn[a],那么它就是割点,反之则不是割点。

  如果\(low[b]>=dfn[a]\),a一定是割点。因为\(low[b]>=dfn[a]\)说明有在b这个子树中,里面所有点都互相搞来搞去,但是不能搞到a上面去,所以把a切断以后,这个子树就被隔离了。所以仅仅一个子树就可以让a成为割点。反之如果所有a的孩子b,都满足\(low[b]<low[a]\),那么a就不是割点。

2.如何求桥

桥也必须满足去掉其以后,图被分割。所以对于一条边(a, b),如果\(low[b]>=dfn[a]\),那他就是桥(不证了)。

还有一个low和dfn的问题:在tarjan求割点时,如果v再栈中,必须写成low[u]=min(low[u],dfn[v])。因为u可能被传送到了非树枝边到不了的地方。但是求强连通分量可以这样,因为它是有向图,如果它的祖宗能连到它,他又能连到他的祖宗,那么它的祖宗能连到的地方,他也能连到。然而无向图求割点就不能这样。

技术分享图片

tarjan求割点割边的思考

标签:class   就是   www.   算法   有向图   min   math   隔离   技术   

原文地址:http://www.cnblogs.com/MyNameIsPc/p/7965907.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!