强连通分量 Tarjan

强连通分量 Tarjan

前言

其实很早就会用Tarjan打强连通了,但还是有些一知半解,也忘性大,现在总结一下。

强连通分量的定义

假设我们现在有这个图:
在这里插入图片描述
很显然这三个点两两之间可以到达,那么我们就称这个图是强连通的。

假设我们多加一个节点
在这里插入图片描述
之前的子图强连通,但不是强联通分量,因为它不是最大的强连通子图,而{1,2,3,4}是强连通分量。一个强连通分量的子图可能有多个是连通分量,但我们找强连通分量是要找尽可能大的。

那么得出定义:有向图的极大强连通子图,称为强连通分量。

用途

首先为什么要找?
1.常用于有向图的缩点
缩点就是把每个强连通分量变成分别几个点。
比如这个图:
在这里插入图片描述
缩点后就变成:
在这里插入图片描述
{1,2,3,4}对应3,5、6分别对应2、1(单独构成强连通分量)

比如这道题:

  • 我们的郭嘉大大在曹操这过得逍遥自在,但是有一天曹操给了他一个任务,在建邺城内有N(<=1000)个袁绍的奸细,将他们从1到N进行编号,同时他们之间存在一种传递关系,即若C[i,j]=1,则奸细i能将消息直接传递给奸细j。
      现在曹操要发布一个假消息,需要传达给所有奸细,而我们的郭嘉大大则需要传递给尽量少的奸细使所有的奸细都知道这一个消息,问我们至少要传给几个奸细

显然,如果把奸细直接的关系图缩点后,只要求出入度为0的强连通分量个数就行了。

2.解决2-SAT问题(这里先不讲)

Tarjan求强连通分量(缩点)

先给出一些定义:
d f n [ u ] dfn[u] dfn[u]表示 u u u的搜索次序(时间戳,就是说 u u u是第几个搜到的)
l o w [ u ] low[u] low[u]表示 u u

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值