學習筆記 tarjan

2022-10-09 03:15:13 字數 620 閱讀 1859

有向圖dfs生成樹有且僅有一下四類邊:

如果結點\(u\)是極大強連通子圖\(g'\)在dfs搜尋樹上第乙個搜到的結點,那麼\(g'\)的其他節點一定在以\(u\)為根的子樹中,我們稱結點\(u\)為強連通分量\(g'\)的根.

簡單證明一下上面這個結論,考慮反證法. 若\(u\)的子樹的結點集合為\(t\),假設\(\exist v\in g'v, s.t.v\notin t\),則\(u\rightarrow v\)的路徑中,必然存在一條邊直線\(u\)的祖先或者其他子樹,也就是說這條邊必然是回邊或者兄弟邊,那麼\(v\)一定比\(u\)先訪問到,這與假設矛盾,所以原命題成立.

我們維護下面兩個變數

按照深度優先搜尋的順序dfs序,對於一條邊\(u\rightarrow v\),我們分以下情況討論

若存在乙個結點\(u\)滿足\(dfn_u = low_u\),則\(u\)是乙個強連通分量的根節點.

給定無向連通圖\(g=(v,e)\)

無向邊\(x\rightarrow v\)是橋,當且僅當\(y\)為搜尋樹上\(x\)的乙個子結點,滿足

\[dfn_x

證明很容易,這裡不再證明

同理.

Tarjan學習筆記

集訓太棒了 首先,強連通分量的定義 有向圖內,乙個強連通分量內任一點之間都存在至少一條路徑。直觀一點?乙個點集,在有向圖上它們構成了乙個環 個人理解但的確是這樣 一些定義 dfn u 是節點u的時間戳,表示點u是第幾個被訪問的節點。low u 是u或u的子樹能夠追溯到的最早的棧中節點的時間戳。當df...

Tarjan 學習筆記 LCA

常用的求 lca 的演算法有 ta rjan df s st 倍增o logn o nlog n 之間。ta rjan 是 離線 演算法。顧名思義,就是在一次遍歷中把所有詢問一次性解決,所以其時間複雜度是 o n q 利用了 df s 和並查集的思想,祖先回溯記錄為上乙個,如果已經某一點遍歷過了就 ...

學習筆記 割點 tarjan

給出乙個n個點,m條邊的無向圖,求圖的割點。那麼割點是什麼呢,就是說,如果你去掉了這個點和所有與這個點相連的邊之後,整張圖的連通塊數量增加了,這個點就是乙個割點 怎麼做呢,每次列舉乙個點,dfs一遍,看有沒有增加連通塊,好像是n方,n有2w那麼大,會炸啊 運用這個演算法,可以只dfs一遍,或者只需要...