首先我们需要搞懂图论中的一些基础概念
完全图: 假设一个图有 n n n 个顶点, 并且每两个点之间都有边就叫完全图
连通图(多指无向图): 对于两个点, u , v , u,v, u,v, 如果 u , v u,v u,v 之间有通路,则称 u , v u,v u,v 两点连通, 如果图中任意两个点都连通, 则称这个图为连通图
连通分量: 连通分量中任意两点 u , v , u,v, u,v, 两两之间必定能互相到达, u − > v , v − > u . u->v, v->u. u−>v,v−>u. (当然一个点也是连通分量)
强连通分量: 极大的连通分量,对于连通分量内部的任意两个点 u , v , u, v, u,v,, 既存在 u u u 到 v v v 的路径, 又存在 v v v 到 u u u的路径,并且如果再加入其它点和边就不再连通的,
tarjan算法求强连通分量
了解 t a r j a n tarjan tarjan 算法之前你必须了解一个概念, 时间戳
时间戳: 根据深度优先搜索的顺序给节点标号
有了时间戳后我们就可以引入两个概念:
d f n [ u ] dfn[u] dfn[u]: 节点 u u u 所对应的时间戳
l o w [ u ] low[u] low[u]: 节点 u u u 所能够到达的时间戳的最小值
如果 d f n [ u ] = = l o w [ u ] dfn[u] == low[u] dfn[u]==low[u] ⟺ \iff ⟺ u u u 节点是所在强连通分量的最高点
判断一个点是否在某个强连通分量中