强连通分量
1|0概念
连通 在有向图中存在到的路径,则称可达。如果互相可达,则连通。
强连通 有向图强连通指中任意两个结点连通。
强联通分量 有向图的极大强连通子图。
2|0DFS 生成树
在有向图上进行 DFS 会形成森林。DFS会形成4 种边。
- Tree Edge,树边
- Back Edge,返祖边,指向祖先结点的边
- Cross Edge,衡叉边,指向搜索过程中已经访问过的结点,但是这个结点并不是祖先节点
- Forward Edge,前向边,指向子孙节点的边
如果结点是某个强连通分量在搜索树中遇到的第一个结点,那么这个强连通分量的其余结点肯定是在搜索树中以为根的子树中。结点被称为这个强连通分量的根。
3|0Tarjan
在 Tarjan 算法中为每个结点维护以下几个变量
dfn[i]
,节点的dfs序low[i]
,所在子树的节点经过最多一条非树边能到达的结点中最小的 dfs序scc[i]
,节点所在的联通块inStk[i]
,节点是否在栈中
同时还要维护capacity[i]
表示,强连通分量内结点数量
如果出现了low[x] == dfb[x]
的情况,则是他所在强连通分量的根,且栈中以上的点全部都是这个强连通分量内的结点。
4|0缩点
求出强连通分量后还可以进行缩点,即把同一个强连通分量的点当做一个点来处理。这样可以得到一个有向无环图。注意因为编号较小的点不能到达编号较大的点,所以 scc 的编号顺序还符合拓扑序(编号越大拓扑序越靠前)。
5|0luogu P2341
反向建边,求出强连通分量,缩点后判断找入读为 0 的点,如果不唯一则无解,反之入读为零的点的大小就是答案。
6|0luogu P2746
首先对图进行缩点,然后求出入度为零的点的数量,出度为零的点的数量,任务答案就是,任务B答案就是
注意特判整张图本身就强连通的情况。
__EOF__

本文作者:PHarr
本文链接:https://www.cnblogs.com/PHarr/p/17649508.html
关于博主:前OIer,SMUer
版权声明:CC BY-NC 4.0
声援博主:如果这篇文章对您有帮助,不妨给我点个赞
本文链接:https://www.cnblogs.com/PHarr/p/17649508.html
关于博主:前OIer,SMUer
版权声明:CC BY-NC 4.0
声援博主:如果这篇文章对您有帮助,不妨给我点个赞
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律