【OI学习笔记】有向图的强联通分量

本文详细介绍了图论中的强连通分量概念及其重要性,特别是在有向无环图(DAG)转换中的应用。讲解了强连通分量的定义、用途,以及如何通过Tarjan算法求解强连通分量。算法中涉及了时间戳、DFS序、栈等数据结构,并给出了具体的代码实现。最后,通过一个实例展示了强连通分量在解决实际问题中的应用。

板块:图论
难度:较易
前置知识:图的基本概念与性质、有向无环图(DAG)

定义

  • 连通分量:对于一个有向图,对于分量中的任意两点 u , v u,v u,v,必然可以从 u u u 走到 v v v,从 v v v 走到 u u u
  • 强连通分量:极大连通分量(简称SCC)

用途

将任意一个有向图转换为有向无环图。如对于下图,我们通过缩点操作将 2、3、6 合并为一点,所谓缩点,就是将一个强联通分量中的所有点都合并为一个点的操作,一个强联通分量内的各点一定可以互相到达。操作的最终结果就是把每个点都放在一个强联通分量中。
在这里插入图片描述
演变为下图:
在这里插入图片描述
这样做的好处,一方面,在求最短最长路时可以线性地做;另一方面,很多题目在一个任意有向图中难以完成,但放在一个有向无环图中则会变得简单。因此,强连通分量的相关算法在信息学竞赛中发挥着中重要作用。

算法基本原理与过程

基本原理

首先先介绍一些特殊的边,在实际算法实现中不会涉及,但有助于我们理解算法的原理与过程:

  • 树枝边:对于 ( x , y ) (x,y) (x,y),若 x x x y y y 的父节点,则 x x x y y y 相连的边称为树枝边。
  • 前向边:对于 ( x , y ) (x,y) (x,y),若 x x x y y y 的祖先节点,则 x x x y y y 相连的边称为前向边。树枝边是特殊的前向边。
  • 后向边:对于 ( x , y ) (x,y) (x,y),若 y y y x x x 的祖先节点,则 y y y x x x 相连的边称为后向边。
  • 横叉边:对于 ( x , y ) (x,y) (x,y),若 x x x y y y 的左侧的其他分支,那么 x x x y y y 相连的边称为横叉边。根据 DFS 序,横叉边只能向左。
    一些特殊的边

我们要把每个节点都放在一个强联通分量中,那么我们首先应该判断它是否已经在一个强联通分量中。总的来说,如果一个节点可以回到某个祖先节点,那么它已经存在在一个SCC中了。具体地,分为以下两种情况:

  • 可以沿着路径回到某个祖先节点(即存在一条
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oier_Asad.Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值