码迷,mamicode.com
首页 > 编程语言 > 详细

tarjan算法

时间:2021-03-16 11:48:55      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:强连通分量   step   算法   顺序   最小值   深搜   tar   出现   节点   

求强连通/割点/桥

step1

将图深搜,形成深搜树,按遍历顺序标号->dfn[i]

step2

将low[i]初始化为dfn[i]

step3

回溯时low[i]=min(low[i],low[i的儿子])

判断

DFN[]作为这个点搜索的次序编号(时间戳)

LOW[]作为每个点在这颗树中的,子树根编号的最小值


有向图中

如果找到DFN[]==LOW[]就说明这个节点是这个强连通分量的根节点(毕竟这个LOW[]值是这个强连通分量里最小的。)


无向图中

在深搜树中,如果对于某个点u,与它相连的点v(v不是u的父亲)。

如果 low[v]>=dfn[u] , 那么也就是以v为根的深搜子树中的点所连接的点没有已经标记时间戳的。

也就是以v为根的子树是封闭的,那么一旦去掉点u,这棵子树中的点就称为了一个新的连通分量。

那么点u就是割点了。

若边 e (其对应的两个节点分别为 u 与 v)dfn[u] < low[v]

我们发现从v节点出发,在不经过(u, v)的前提下,不管走哪一条边,

我们都无法抵达u节点,或者比u节点更早出现的节点,

此时我们发现v所在的子树似乎形成了一个封闭圈,那么(u, v)自然也就是了。

桥的两端一定是割点

tarjan算法

标签:强连通分量   step   算法   顺序   最小值   深搜   tar   出现   节点   

原文地址:https://www.cnblogs.com/zhangshaojia/p/14531875.html

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