int n, m;
struct Edge
{
int u, v, w;
}a[MAX_M];
// 令a關於w升序排列
int r[MAX_N];
// 並查集
int Find(int x)
{
if(r[x] ^ x) return r[x] = Find(r[x]);
return x;
}
int MST;
void Kruskal()
{
for(register int i = 1; i <= n; ++i) r[i] = i;
for(register int i = 1; i <= m; ++i)
{
if(Find(a[i].u) ^ Find(a[i].v))
{
r[Find(a[i].u)] = Find(a[i].v);
MST += a[i].w;
}
}
cout << MST;
return 0;
}
【模板】Kruskal
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.