#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
struct node
{
int l, r, v;
}e[N*N];
bool cmp(node a, node b)
{
return a.v < b.v;
}
int b[N+1];//并查集
int find(int x)
{//查找
if(x != b[x]) b[x] = find(b[x]);
return b[x];
}
//hdu1233 题板 kruskal+并查集
int main()
{
int n;
while(scanf("%d",&n)) {
if(!n) break;
for(int i=1; i<=n; i++) b[i] = i;//初始化
int m = n*(n-1)/2;
for(int i=1; i<=m; i++) {
scanf("%d%d%d",&e[i].l,&e[i].r,&e[i].v);
}
sort(e+1, e+m+1, cmp);//按权值从小到大排序
int ans = 0;
for(int i=1; i<=m; i++) {
int x = find(e[i].l), y = find(e[i].r);
if(x != y) {
b[x] = y;
ans += e[i].v;
}
}
printf("%d\n",ans);
}
return 0;
}
最小生成树模板
最新推荐文章于 2024-08-28 14:35:43 发布