題目大意
題目分析
實現(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...