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
猜你喜欢
转载自blog.csdn.net/kcn999/article/details/84895798
今日推荐
周排行