[学习笔记] tarjan

强连通分量学习笔记

一些定义#

Graph1

有向图DFS生成树有且仅有一下四类边:

  • 树边tree edge:在上图中是黑色的边,每次搜索还没有访问过的结点时经过的边即为树边.
  • 回边back edge:在上图中为红色(71),即指向搜索树中指向已经访问过的结点的边
  • 兄弟边brother edge:指向已经访问过,但不是祖先的结点,在上图中为蓝色(97)
  • 前向边forward edge:不是树边,回边,兄弟边的边(36)

一个小性质#

如果结点u是极大强连通子图GDFS搜索树上第一个搜到的结点,那么G的其他节点一定在以u为根的子树中,我们称结点u为强连通分量G的根.

简单证明一下上面这个结论,考虑反证法. 若u的子树的结点集合为T,假设vGv,s.t.vT,则uv的路径中,必然存在一条边直线u的祖先或者其他子树,也就是说这条边必然是回边或者兄弟边,那么v一定比u先访问到,这与假设矛盾,所以原命题成立.

Tarjan算法求强连通分量#

我们维护下面两个变量

  • dfnu:进行DFS深度优先遍历时u是第几个被遍历到的
  • lowu:能回溯到的最早的已经在搜索栈的结点. 具体地说,lowu定义为以下结点中dfn的最小值
    1. u为根的子树中的结点
    2. 通过以u为根的子树能够通过非树边到达的所有结点

按照深度优先搜索的顺序DFS序,对于一条边uv,我们分以下情况讨论

  • 树边:继续遍历v的子树,并lowumin{lowu,lowv}

  • 回边:lowumin{lowu,dfnv}

若存在一个结点u满足dfnu=lowu,则u是一个强连通分量的根节点.

Tarjan 算法与无向图连通性#

定义#

给定无向连通图G=(V,E)

  • 对于结点xE,如果删除x和它所连的边后,G不再连通,我们称x是无向连同图G的一个割点

  • 对于边yV,如果删除y后,G不再连同,我们称y是无向连通图G的桥

桥的判定法则#

无向边xv是桥,当且仅当y为搜索树上x的一个子结点,满足

dfnx<lowy

证明很容易,这里不再证明

割点的判定法则#

同理.

posted @   ZQYang  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示
主题色彩