poj 2553 強連通分支 出度為0的點

2021-09-08 22:22:51 字數 1359 閱讀 4569

題目大意

題目分析

實現(c++)

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

#define max_node 5005

#define min(a, b) a < b? a:b

#define max(a, b) a > b? a:b

vectorggraph[max_node];

stackgstack;

int gdfn[max_node];

int glow[max_node];

bool **isited[max_node];

bool ginstack[max_node];

int gclusterofnode[max_node];

int gindex;

int gclusterindex;

//tarjan演算法求強連通分支

void tarjan(int u)

else if (ginstack[v])

} if (gdfn[u] == glow[u]) while (v != u);

++gclusterindex; }}

vector>glinkfrom; //每個強連通分支,入點集合

vector> glinkto; //每個強連通分支,出點集合

void reconstructgraph(int nodes, int clusters)

} }}int main()

int u, v;

for (int i = 0; i < r; i++)

memset(**isited, false, sizeof(**isited));

memset(ginstack, false, sizeof(ginstack));

gindex = gclusterindex = 0;

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

reconstructgraph(n, gclusterindex); //將染色後的圖進行重構(即設定強連通分支)

setzero_outdegree_cluster_id; //出度為0的強連通分支的集合

for (int i = 0; i < gclusterindex; i++)

} //遍歷每個點,判斷其是否屬於那些出度為0的強連通分支

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

} printf("\n");

} return 0;

}

強連通分支

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

poj 2553 強連通縮點出度為0

題意 乙個有向圖 如果乙個點u能夠達到點v,v也能到達u,則u是sink點 找出所有的sink 按順序輸入 注意 如果點u能夠到達的所有點中,有乙個點不能到達u u就不算是sink 必須所有的點都能夠達到u 第二組資料 1 2 1 能到達的點事 1 2 但2不能到達1 所以1不是sink 2能夠到達...

poj 2553強連通 縮點

先吐槽下,剛開始沒看懂題,以為只能是乙個連通圖0t0 題意 給你乙個有向圖,求g圖中從v可達的所有點w,也都可以達到v,這樣的v稱為sink.求這樣的v.解 求強連通 縮點。求所有出度為0的點即為要求的點。注意 可能有多個聯通分支。include include include define n 5...