Tarjan学习笔记

2023-05-02,

\(Tarjan\)是个很神奇的算法。

给一张有向图,将其分解成强连通分量们。

强连通分量的定义:一个点集,使得里面的点两两可以互相到达,并且再加上另一个点都无法满足强连通性。

\(Tarjan\)的核心是对于每个点打的标记\(dfn\)和\(low\)。

\(dfn\)的定义:\(dfn_u\)表示\(dfs\)时到达\(u\)的时间。

\(low\)的定义:\(low_u\)表示从\(u\)的\(dfs\)子树中可以到达的最小的现在还在访问的节点的\(dfn\)。

然后主要部分就是\(dfs​\)了。

这里要显式地维护一个栈,保存现在在访问中或者在当前节点的\(dfs\)子树中的所有节点,如果这个节点的\(low\)和\(dfn\)相等,则说明它是一个强连通分量的代表元,则一直弹栈直到把自己弹出去为止。这些节点都属于一个强连通分量。

代码

Tarjan学习笔记的相关教程结束。

《Tarjan学习笔记.doc》

下载本文的Word格式文档,以方便收藏与打印。