#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int par[100], n, m;
struct edge{
int x, y;
int val;
}pp[10000];
bool cmp(edge a, edge b){
return a.val < b.val;
}
int find(int ss){
if(ss == par[ss])
return ss;
return par[ss] = find(par[ss]);
}
int main(){
int i, j;
while(scanf("%d", &n)!=EOF){
if(n == 0)
break;
for(i = 1; i <= n; i++)
par[i] = i;
for(i = 1; i <= n*(n-1)/2; i++)
scanf("%d%d%d", &pp[i].x, &pp[i].y, &pp[i].val);
sort(pp+1, pp+1+n*(n-1)/2, cmp);
int ans = 0;
for(i = 1; i <= n*(n-1)/2; i++){
int xx = find(pp[i].x);
int yy = find(pp[i].y);
if(xx != yy){
par[xx] = yy;
ans += pp[i].val;
}
}
printf("%d\n", ans);
}
return 0;
}
最小生成树kruskal算法
最新推荐文章于 2023-08-15 17:34:02 发布