雙連通分量

雙連通分量

無向圖的雙連通分量跟有向圖的連通分量有點像。

先說說一些定義。

時間戳:以某個點vi 爲起點,dfs到的其他點vj 的時間。通常用pre表示

連通圖:每兩個點間都有路徑存在的無向圖就叫連通圖。

割頂(cut vertex):也叫割點。在某個連通圖G 中,若去掉某個點i ,該圖G 無法保持所有點連通,那這個點就是割頂。

橋(bridge):類似的,在某個連通圖G 中,若去掉某個邊e ,該圖G 無法保持所有點連通,那這個邊就叫橋。

點-雙連通

若一個無向圖的點兩兩間都有兩條不相交(經過的點不一樣)的路徑,那麼我們就稱這個無向圖是點-雙連通的。條件等價於任意兩條邊都在一個簡單環內。

不難發現,若一個無向圖是點-雙連通圖,那麼就代表這個圖內部無割頂(既然有兩條不相交的路徑,去掉任何一個點都還是可以連通的)。

邊-雙連通:

類似的,若一個無向圖的點兩兩間都有兩條不重合(這個要求低一點,點可以重複,但邊不行)的路徑,那麼我們就稱這個無向圖是邊-雙連通的。

在邊-雙連通圖中,去掉任何一條邊,這個圖都還是連通的。

下面進入正題:

​ 對於一張無向圖,它的點-雙連通的極大子圖稱爲雙連通分量(Biconnected Component,BCC)。

​ 而邊-雙連通的極大子圖稱爲邊-雙連通分量(edge-biconnected component)。

雙連通

​ 如上圖:雖然{3,4,5}也是點-雙連通的,但{3,4,5,6,7}才叫雙連通分量,這就是極大子圖的意義。另外一個雙連通分量是{1,2,3}。還有,整個圖{1,2,3,4,5,6,7,8}是邊-雙連通分量。

​ 還如上圖:對於整個圖來說,3是割頂。不難發現作爲割頂的點會同時存在於多個雙連通分量裏。而其他點只可能存在於一個雙連通分量裏。

​ 找連通分量首先要會找割頂。

​ 隨便找一個點作爲根,強行把無向圖轉換爲一棵樹。連回祖先的邊我們叫它反向邊(要與有向圖的反向邊區分開)。

​ 不難發現:若某個點v 的後代都沒有反向邊連回v 的祖先,那麼就可以得出v 是割頂的結論。

​ 用時間戳就可以知道祖孫關係。

​ 若發現某個點的後代最多隻能連回它自己,則說明這個點及它的後代就是一個雙連通分量。

注意:用反向邊更新時,不能用連回父親的邊,這條邊沒意義。

例題:UVaLive3523(這裏題解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章