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

tarjan求割点割边的思考

时间:2017-09-20 10:22:52      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:部分   逻辑   去除   思路   思考   割边   nbsp   先来   blog   

这个文章的思路是按照这里来的。

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

  一,根节点如果有两颗及以上子树,它就是割点。这个应该说是显然的。

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

  我们先来证明如果low[b]<dfn[a],a一定不是割点。low[b]<dfn[a]说明有一个结点,通过非树枝边可以访问到a以前的结点,那么显然去掉a以后,b依然与a以上的递归树联通,a不是割点。再来证明如果low[b]>=dfn[a],a一定是割点。这说明a的子树中没有一个节点能够连到递归树上,那么a去掉以后显然就是割点。

再来考虑桥:

桥:若是一条无向边(u,v)是桥,

            1)当且仅当无向边(u,v)是树枝边的时候,需要满足dfn(u)<low(v),也就是v向上翻不到u及其以上的点,那么u--v之间一定能够有1条或者多条边不能删去,因为他们之间有一部分无环,是桥。如果v能上翻到u那么u--v就是一个环,删除其中一条路径后,能然是连通的。

  引理:如果存在一条非树枝边(u,v),说明存在一条从u到v且单纯由树枝边组成的路径。考虑u,v的连通性。如果图去除(u,v)联通,那么引理成立。如果图去除(u,v)不连通,说明(u,v)一定是树枝边,与假设矛盾。

  首先证明只有递归树的树枝边可能是桥。通过引理我们发现非树枝边显然不是桥。然后我们要证明只有(u,v)是树枝边,且dfn(u)<low(v)时(u,v)才是桥。这个的证明其实和上面的差不多,也是通过递归树的联通性来证明的。这样就证完了。。

感觉逻辑还是不清楚,。。。。

还有一个low和dfn的问题:在tarjan求割点时,如果v再栈中,必须写成low[u]=min(low[u],dfn[v])。因为u可能被传送到了非树枝边到不了的地方。但是求强连通分量可以这样,是因为如果能走到low[u]=dfn[v]这一步,它们一定组成强连通分量。

tarjan求割点割边的思考

标签:部分   逻辑   去除   思路   思考   割边   nbsp   先来   blog   

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

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