返回顶部

强连通

作者:@魔幻世界魔幻人生
本文为作者原创,转载请注明出处:https://www.cnblogs.com/subtlemaple/p/16340032.html


强连通

首先我们引入定义:

1、有向图G中,以顶点v为起点的弧的数目称为v的出度,记做deg+(v);以顶点v为终点的弧的数目称为v的入度,记做deg-(v)。

2、如果在有向图G中,有一条<u,v>有向道路,则v称为u可达的,或者说,从u可达v。

3、如果有向图G的任意两个顶点都互相可达,则称图 G是强连通图,如果有向图G存在两顶点u和v使得u不能到v,或者v不能到u,则称图G是强非连通图。

4、如果有向图G不是强连通图,他的子图G2是强连通图,点v属于G2,任意包含v的强连通子图也是G2的子图,则乘G2是有向图G的极大强连通子图,也称强连通分量。

5、什么是强连通?强连通其实就是指图中有两点u,v。使得能够找到有向路径从u到v并且也能够找到有向路径从v到u,则称u,v是强连通的。 ------转自csdn强连通算法--Tarjan个人理解+详解_mengxiang000000的博客-CSDN博客

个人理解:强连通图是指一个任意两节点 u,v 可互相到达的图,强连通分量就是一个图的强连通子图

img

上图就有三个强连通分量,下面我们将用Tarjan算法找出:

割点

若从图中删除节点 x 以及所有与 x 关联的边之后,图将被分成两个或两个以上的不相连的子图,那么称 x 为图的割点

若从图中删除边 e 之后,图将分裂成两个不相连的子图,那么称 e 为图的割边

 

Tarjan算法

发明者神中神,这里不多提

算法流程

1.使用dfs,从任意节点开始深度搜索,给每个节点按顺序标号 (dfn[u]=++cnt)

dfs 时规定:1)dfn[]为节点标号 , vis[] 记录节点是否已经经过,

2)low[]dfs u\to v ,则 dfs 回溯时 low[u]=min(low[u],low[v]) ,初始化low[u]=dfn[u] ,从 u \to v 时先判断 v 是否已经过。若已走过,则直接刷新 low[u]dfs,否则,先继续 dfs , 回溯时再刷新 low[u]

2.我们能发现,强连通图必定成环,则环内每一点都的 low 都能在回溯时被环中最小的 dfn 刷新,则 low[u]==dfn[u] 时,u 就是该强连通图的一个点

 
posted @   魔幻世界魔幻人生  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示