[学习笔记] tarjan
强连通分量学习笔记
一些定义#
有向图DFS
生成树有且仅有一下四类边:
- 树边
tree edge
:在上图中是黑色的边,每次搜索还没有访问过的结点时经过的边即为树边. - 回边
back edge
:在上图中为红色(),即指向搜索树中指向已经访问过的结点的边 - 兄弟边
brother edge
:指向已经访问过,但不是祖先的结点,在上图中为蓝色() - 前向边
forward edge
:不是树边,回边,兄弟边的边()
一个小性质#
如果结点是极大强连通子图在DFS
搜索树上第一个搜到的结点,那么的其他节点一定在以为根的子树中,我们称结点为强连通分量的根.
简单证明一下上面这个结论,考虑反证法. 若的子树的结点集合为,假设,则的路径中,必然存在一条边直线的祖先或者其他子树,也就是说这条边必然是回边或者兄弟边,那么一定比先访问到,这与假设矛盾,所以原命题成立.
Tarjan算法求强连通分量#
我们维护下面两个变量
- :进行
DFS
深度优先遍历时是第几个被遍历到的 - :能回溯到的最早的已经在搜索栈的结点. 具体地说,定义为以下结点中的最小值
-
- 以为根的子树中的结点
- 通过以为根的子树能够通过非树边到达的所有结点
按照深度优先搜索的顺序DFS序
,对于一条边,我们分以下情况讨论
-
树边:继续遍历的子树,并
-
回边:
若存在一个结点满足,则是一个强连通分量的根节点.
Tarjan 算法与无向图连通性#
定义#
给定无向连通图
-
对于结点,如果删除和它所连的边后,不再连通,我们称是无向连同图的一个割点
-
对于边,如果删除后,不再连同,我们称是无向连通图的桥
桥的判定法则#
无向边是桥,当且仅当为搜索树上的一个子结点,满足
证明很容易,这里不再证明
割点的判定法则#
同理.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App