雙連通分量

2021-07-02 11:36:15 字數 1298 閱讀 7112

在乙個無向連通圖中,如果任意去掉乙個定點i及依附於i的所有邊後得到的圖仍然連通,

則稱該圖為「2-連通圖」。否則,若得到多個連通分量,則該圖不是雙連通的,頂點i被稱為

「割點 」。

簡單的說,在雙連通圖中,任何一對頂點都至少存在兩條路徑可以互相到達。圖的連通

性不會任何乙個頂點的影響。這個性質具有許多重要的應用價值,例如現實中的通訊網路部署,

出於可靠性和容錯性的考慮,在結構上應考慮多連通性,盡量避免割點的存在。這樣就算乙個

通訊節點損毀,也不會對其他節點的通訊造成影響。

無向圖的極大雙連通子圖被稱為2-連通分量。乙個無向圖都具有乙個或多個2-連通分量。

如果圖本身是乙個雙連通圖,那麼它本身是自己唯一的2-連通分量。乙個無向圖具有2個或以

上2分量時,不難看出它的任意兩個2分量最多隻可能有乙個公共頂點。因為如果有多於乙個公

共頂點,就可以證明這兩個2分量實際上可以組成乙個更大的2分量,從而引起矛盾。進一步還

可以得出同一條邊不可能處於多個二分量之中,因為一條邊有兩個頂點,如果一條邊屬於多個

二分量,則相當於兩個頂點可以同時處於多個二分量之中,這與前述矛盾。

綜上,所有二分量實際上把圖劃分為了不相交的子集,連線不同二分量的邊成為割邊。

可以利用深度優先搜尋求2-連通分量。如果生成樹的root是割點,當且僅當它有多於乙個

子女。如果生成樹的非根節點是割點,當且僅當它沒有乙個後代可以通過後向邊回到它的祖先。

根據這些條件,我們定義乙個點的時間戳為深度優先數,代表著頂點在深度優先搜尋時被訪問

的先後次序,記為d。如果d(i)

知道乙個頂點是不是割點,對頂點定義引數low,low[i]為從i或其後代出發,通過後向邊所能達

到的最小深度優先數。

low[i]=min , min }

//edge為無向圖邊表,n為頂點數, e總邊數

void

twocc(

intn,

inte)

//從u做dfs,v是u之父,num為目前深度優先數

//top --> s

void

dfs(

intu,

intv,

intnum,

intd,

intlow,

ints,

inttop)

if( d[l

->

dest] ==0

)while(1

)else

if( l

->

dest 

!=v )

l=l->

next;

雙連通分量

在無向連通圖中,如果刪除該圖的任何乙個結點都不能改變該圖的連通性,則稱該圖是雙連通的。雙連通無向圖一定是連通的,而連通的無向圖則不一定是雙連通的。對於乙個連通的無向圖也有雙連通分量的概念,定義自然不言而喻。同樣,我們也可以利用tarjan演算法求雙連通分量。define n 10000 struct...

雙連通分量

雙連通分量就是無向圖中的強連通分量,基本就是找割頂和橋。割頂就是乙個點,如果把它取掉,連通分量數量就會增加,橋就是一條邊,同理。對於乙個連通圖,如果任意兩點至少存在兩條 點不重複 的路徑,也就是任意兩條邊都在乙個簡單環中,即內部無割頂,則說這個圖是點雙連通的。對於乙個連通圖,如果任意兩點至少存在兩條...

雙連通分量

無向圖的雙連通分量跟有向圖的連通分量有點像。先說說一些定義。時間戳 以某個點vi 為起點,dfs到的其他點vj 的時間。通常用pre表示 連通圖 每兩個點間都有路徑存在的無向圖就叫連通圖。割頂 cut vertex 也叫割點。在某個連通圖 g 中,若去掉某個點 i,該圖 g 無法保持所有點連通,那這...