強連通分量 兩次DFS求解

2021-09-28 18:25:56 字數 785 閱讀 3808

\quad

求乙個有向圖強連通分量個數以及每個點所屬連通分量

#include

#include

#include

using

namespace std;

const

int maxn =

1e5+10;

vector<

int> e[maxn]

;// 正向邊

vector<

int> re[maxn]

;// 反向邊

vector<

int> a;

// 後序遍歷圖記錄下頂點遍歷順序

int vis[maxn]

;int cmp[maxn]

;// 記錄每個頂點所屬連通分量編號

void

dfs(

int u)

a.push_back

(u);

}void

rdfs

(int u,

int k)

}// 返回連通分量個數

intscc

(int n)

intmain()

int res =

scc(n)

; cout << res << endl;

return0;

}/*輸入6 10

1 22 3

3 12 4

4 54 6

5 65 7

6 56 7

*/

強連通分量 tarjan求強連通分量

雙dfs方法就是正dfs掃一遍,然後將邊反向dfs掃一遍。挑戰程式設計 上有說明。雙dfs 1 include 2 include 3 include 4 include 5 6using namespace std 7const int maxn 1e4 5 8 vector g maxn 圖的鄰...

強連通分量

對於有向圖的乙個頂點集,如果從這個頂點集的任何一點出發都可以到達該頂點集的其餘各個頂點,那麼該頂點集稱為該有向圖的乙個強連通分量。有向連通圖的全部頂點組成乙個強連通分量。我們可以利用tarjan演算法求強連通分量。define n 1000 struct edge e 100000 int ec,p...

強連通分量

在有向圖g中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通 strongly connected 如果有向圖g的每兩個頂點都強連通,稱g是乙個強連通圖。非強連通圖有向圖的極大強連通子圖,稱為強連通分量 strongly connected components 下圖中,子圖為乙個強連通分量,因為...