#include "stdio.h" //最短路 Kruskal算法 存边,排序,并查集合并,直至要求的两点相通,输出最小结果 //hdu 1233 #include "stdlib.h" struct node { int x,y; int w; }line[10005]; int ans; int set[10005]; int cmp(const void *a,const void *b) { return (*(node *)a).w - (*(node *)b).w; } int find(int x) { if(set[x] == x) return x; return find(set[x]); } void Union_t(int x,int y,int w) { int fa = find(x); int fb = find(y); if(fa!=fb) { ans += w; set[fa] = fb; } } int main() { int n,m; int i; while(scanf("%d",&n),n!=0) { m = n*(n-1)/2; for(i=0;i<=n;i++) set[i] = i; for(i=0;i<m;i++) { scanf("%d %d %d",&line[i].x,&line[i].y,&line[i].w); } qsort(line,m,sizeof(line[0]),cmp); ans = 0; for(i=0;i<m;i++) { Union_t(line[i].x,line[i].y,line[i].w); } printf("%d ",ans); } return 0; }