強連通 Tarjan演算法 配題(HDU 1269)

2021-09-27 06:08:12 字數 1143 閱讀 2053

點於點之間的強連通(u,v):同時存在 u 至 v 的路徑,以及 v 至 u 的路徑,那麼表示u、v兩點是強連通。

強連通圖:如果乙個圖中的任意兩點都是強連通,那麼該圖就是強連通圖。

解決該問題的演算法:tarjan演算法

說明:配題:hdu 1269(中文題)

思想:通過給強連通分量進行著色,如果最後的顏色只有乙個的話,那麼就表示該圖是強連通圖。

#include#include#include#include#includeusing namespace std;

const int max_n = 10005;

const int max_m = 100005;

int n, m;

struct node

;vectorgraph[max_n];

stacks;

int dfn[max_n], low[max_n];

bool instack[max_n];

int index;

int col[max_n];

int col_cnt;

int min(const int& a, const int& b)

void tarjan(int u)

else if (instack[v])

}if (dfn[u] == low[u])

while (v != u); }}

int main()

col_cnt = 0;

index = 0;

memset(dfn, 0, sizeof(dfn));

memset(low, 0, sizeof(low));

memset(instack, false, sizeof(instack));

memset(col, 0, sizeof(col));

while (!s.empty()) s.pop();

for (int i = 1; i <= n; i++)

for (int i = 1; i <= m; i++)

for (int i = 1; i <= n; i++)

}if (col_cnt == 1)

else

}return 0;

}

強連通分量Tarjan演算法

o v e 通常的tarjan寫法是有個dfn陣列跟乙個instack陣列,我精簡了下 把這兩個陣列都刪去了,用更簡便的寫法代替,也省了空間。int low maxn 記錄這棵樹能到達的最早祖先 其實不一定是最早,但不影響使用 int time 時間戳 int num 連通分量的個數 int bel...

強連通分量 tarjan演算法

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

強連通分量 Tarjan演算法

有向圖強連通分量 在有向圖g中,如果兩個頂點vi,vj間 vi vj 有一條從vi到vj的有向路徑,同時還有一條從vj到vi的有向路徑,則稱兩個頂點強連通。如果有向圖g的每兩個頂點都強連通,稱g是乙個強連通圖。有向圖的極大強連通子圖,稱為強連通分量。tarjan 演算法是基於對圖優先搜素的演算法 每...