您的位置:首页 > 其它

关于tarjan求强联通的一点小看法

2013-10-04 23:22 183 查看
在利用tarjan算法求强联通时,若(u,v)是回边,则low[u]=min(low[u],dfn[v]),对于这条,可以换成low[u]=min(low[u],low[v]),这里low数组记录的是对于某点,它所能回到的最早的结点。

因为对于v能回到的结点,既然u能到v,那u自然也能回到v,对于强联通,用dfn[u]==low[u]来判断出栈来说,没有任何关系。

但是,为什么要写dfn[v]呢?

例如,在求割点的时候,对于u,可能有两条支路分别为(u,v),(u,w),假设先走了(u,v),能回到u的前面,回溯到u的时候low[u]=min(low[u],low[v]),显然low[u]<dfn[u],然后此时又走(u,w)这条,假设在这条支路上有一点k,有(k,u)这条边,若是使用low[k]=min(low[k],low[u])的话,当回溯到w是,就有low[w]=low[u]<dfn[u],此时u点就不是割点,但实际上用low[k]=min(low[k],dfn[u])的话,就有low[w]==dfn[u],u是割点,而u确实是割点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: