Tarjan算法简介
一、用途
Tarjan算法,一般用来求解有向图中的强连通分量,并将整个分量视作一个新的点,重新与其他分量连边,构造出一张新的DAG(有向无环图)。
二、算法中的定义
dfn[i]表示点i在dfs搜索中被访问的顺序,即时间戳。
low[i]表示点i以及其在dfs搜索树中的子树所能访问到的节点中最小的时间戳。时间戳越小表明该点在dfs搜索树中越高。
col[i]表示点i所处的强连通分量的编号。
三、算法实现
void tarjan(int u)
{
dfn[u]=low[u]=++ti;
st[++top]=u;//将当前节点入栈
for(int i=he[u];i;i=ne[i])