《算法競賽進階指南》算法
Tarjan算法能在線性時間內求出無向圖的割點和橋,進一步可求出無向圖的雙連通份量。而且能在有向圖中求出有向圖的強連通份量、必經點和必經邊。
只打算給本身複習用,233.學習
幾個定義:
時間戳:其實就是dfs序
在圖的深度優先遍歷過程當中,按照每一個節點第一次被訪問的時間順序,
依次給予 N 個節點 1-N 的整數標記,該標被稱爲時間戳,記爲 dfn[u]
追溯值:
設 subtree(u) 表示搜索中以 x 爲根的子樹
low[u] 是下述全部節點時間戳的最小值spa
關於追溯值的計算:
先令\(low_u = dfn_u\)
v 沒有被訪問過,\(low[u]=min(low[u], low[v])\)
v 被訪問過了,\(low[u]=min(low[u], dfn[v])\)class
Tarjan算法結束,進階
割點定義:搜索
給定無向連通圖 G=(V,E)
若對於 x ∈ V,從圖中刪去節點 x 以及全部與 x 關聯的邊後,G 分裂成兩個或兩個以上不相連的子圖,則稱 x 爲 G 的割點遍歷
若 u 不是搜索樹的根節點 (深搜起點),則 x 是割點當且僅當搜索
樹上存在 v 的一個子節點 v 知足:
dfn[u] ≤ low[v]
∙ 若 u 是搜素樹的根節點,則 u 是割點當且僅當搜索樹上存在至少
兩個子節點 v 1 ,v 2 知足上述條件時間戳
橋定義:總結
若對於 e ∈ E,從圖中刪去邊 e 後,G 分裂成兩個不相連的子圖,
則稱 e 爲 G 的橋或割邊時間
無向邊 (u,v) 是橋,當且僅當搜索樹上存在的 u 的一個子節點 v 知足:
dfn[u] < low[v]
BZOJ1718 BZOJ2730 逃不掉的路 HDOJ3686 POJ2762 BZOJ2438