算法核心·tarjan 割点和桥

概念

桥:去掉该边,无向图不再连通了。

割点:去掉该点,无向图不再连通了。(关键点,single point of failure)

连通:向图中,任一点可以到达任一点。(公路连接,各地都可以到达各地)

强连通:向图中,任一... (同上)

强连通分量:有向图中的一个部分,这个点集互相之间强连通

算法核心

disc[i]

定义

沿着dfs的时间流,visit某点的时间戳timestamp。

使用

最开始dfs visit该点时赋值。

low[i]

定义:

某点出发能够reach到的最早的时间戳。

使用

把分支的dfs走完后update low[i]。如果是已经visited过的点,

强连通分量

方法

如果low[i] == disc[i], 就是强连通分量的“起点”,一直把stack pop下一个low[] == disc[](下一个强连通分量)为止,都是同一个强连通分量。(pop过程中,所有low[i]如果小于disc[i], 就是强连通分量中的点。)

找割点

case 1

u不是root(有祖先),有孩子v, low[v] >= disc[u]

case 2

u是root,出发的dfs孩子(区别于树的孩子)个数 >= 2;

找桥

边【u到v】,low[v] > disc[u]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值