雙連通分量 tarjan

2021-06-23 09:31:18 字數 881 閱讀 6346

點雙連通分量:

在無向連通圖中,如果刪除該圖的任何乙個結點都不能改變該圖的連通性,則該圖為雙連通的無向圖。乙個連通的無向圖是雙連通的,當且僅當它沒有關鍵點.

強連通分量:

在有向圖g中,如果兩個頂點vi,vj間(vi<>vj)有一條從vi到vj的有向

路徑,同時還有一條從vj到vi的有向路徑,則稱兩個頂點強連通。如果有向圖g的每兩個頂點都強連通,稱g是乙個強連通圖。非強連通圖有向圖的極大強連通子圖,稱為強連通分量。

tarjan演算法:

tarjan(u)

tarjan演算法的本質:

對所有的節點進行dfs,並且在遍歷的時候記錄搜到這個點的時間,用dfn儲存。當y搜尋到的某個節點x之前搜尋到了,那麼

說明從節點x到節點y這一段路程組成乙個強連通分量。具體**實現就是每搜過乙個點就把這個點放進棧裡,low陣列記錄這個節

點以及這個節點所在的連通分量中的最小dfn,當low[x]=dfn[x]的時候,說明已經形成了乙個連通分量,那麼把棧裡的節點出棧到x。

tarjan無向圖求點雙聯通:

void tarjan(int x)}}

else if(dnf[y]

tarjan有向圖求強聯通分量:

void tarjan(int x)

else if(instack[y])

}if(low[x]==dnf[x])

nums++;

}}

tarjan演算法求完縮點之後,對於有向圖:

如果入度為0的點的個數為a,出度為0的點的個數為b;

那麼:最少需要加max(a,b)條邊使得原圖變成強聯通圖。

仔細琢磨吧。

Tarjan求點雙連通分量

在乙個無向圖中,若任意兩點間至少存在兩條 點不重複 的路徑,則說這個圖是點雙連通的 簡稱雙連通,biconnected 在乙個無向圖中,點雙連通的極大子圖稱為點雙連通分量 簡稱雙連通分量,biconnected component,bcc 任意兩點間至少存在兩條點不重複的路徑等價於圖中刪去任意乙個點...

雙連通分量

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

雙連通分量

在乙個無向連通圖中,如果任意去掉乙個定點i及依附於i的所有邊後得到的圖仍然連通,則稱該圖為 2 連通圖 否則,若得到多個連通分量,則該圖不是雙連通的,頂點i被稱為 割點 簡單的說,在雙連通圖中,任何一對頂點都至少存在兩條路徑可以互相到達。圖的連通 性不會任何乙個頂點的影響。這個性質具有許多重要的應用...