無向圖的割點與橋
阿新 • • 發佈:2021-08-07
定義
割點:給定一無向連通圖,對於其中一點 \(u\),若從圖中刪掉 \(u\) 和所有與 $u 相連的邊後,原圖分裂成成 \(2\) 個或以上不相連的子圖,則稱 \(u\) 為原圖的割點(或割頂)。
割邊:給定一無向連通圖,對於其中一邊 \((u,v)\),若從圖中刪掉 \((u,v)\) 後,原圖分裂成 \(2\) 個或以上不相連的子圖,則稱 \((u,v)\) 為原圖的割邊(或橋)。
\(Tarjan\) 演算法可以在 \(O(n)\) 內求出所有割點與割邊。
割點
對於無向圖的每一個聯通塊,我們可以把他看成一棵樹,即把我們假定的根節點拎起來。
先思考,怎樣才能判斷出從圖中刪掉 \(u\)
根據之前求 強連通分量 時對 \(dfn\)[1] 和 \(low\)[2] 的定義。
若 \(u\) 是割點,則 \(u\) 滿足一下任一條件:
- 若 uu 不是搜尋樹的根節點,則 uu 是割點當且僅當樹上至少有 uu 的 11 個子節點 vv 滿足:
dfn(u)\le low(v)
dfn(u)≤low(v) - \(u\) 是根節點且 \(u\) 至少有 \(2\) 個子節點滿足上述條件。
dfn(u)\le low(v)dfn(u)≤low(v) 說明從 subtree(v)subtree(v) 出發,若不經過 uu,則無法到達比 uu 的 dfndfn 更小的節點,那麼我們把 uu 刪掉,原圖就被分成了 subtree(v)subtree(v) 和剩下的節點至少 22 個子圖。