Dfn数组记录搜索到该点的时间。
Low数组是一个标记数组,记录该点所在的强连通子图所在搜索子树的根节点的Dfn值。
以上是有向图的low、dfn定义,实际上无向图与其类似。
在实际运用之前,先看下列一些定义:
割点:在一连通图内(无向),去掉一点,则该连通图不再连通,而化成数个子图,则该点被称为割点;,有时必须去掉两个或更多的点连通图才能不再连通,达到割点的效果,这些点被称为割点集合
割边:若删掉某边后,原连通图分裂为多个子图;如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合
一般来说,无向图中的tarjan主要围绕这两个问题进行,而判断割点和割边的方程可以通过low与dfn求出
割点的判定:
判定原理:
在一棵DFS树中
根root是割顶当且仅当它至少有两个儿子
其他点v是割顶当且仅当它有一个儿子u,从u或者u的后代出发没有指向v祖先(不含v)的B边, 则删除v以后u和v的父亲不连通, 故为割顶
割点判定算法:
对于DFS树根, 判断度数是否大于1
对于其他点u, 如果不是根的直接儿子,且low[u] >= dfn[P[u]], 则它的父亲v=P[u]是割点
割边的判定:
原理
发现T边(u,v)时若发现v和它的后代不存在一条连接u或其祖先的B边