/* Author: ACb0y Date: 2010年9月16日1:24:18 Type: MST Kruskal ProblemId: hdu 1233 还是畅通工程 Result: 2960115 2010-09-16 01:22:42 Accepted 1233 343MS 428K 1087 B G++ ACb0y */ #include <iostream> using namespace std; int n, q; int g[110][110]; int father[110]; struct edge { int x; int y; int w; }; edge edges[10100]; int cmp(const void * a, const void * b) { edge * pa = (edge *) a; edge * pb = (edge *) b; return pa->w > pb->w ? 1 : -1; } int find(int x) { if (x != father[x]) { return find(father[x]); } return x; } int main() { int i, j; #ifndef ONLINE_JUDGE freopen("1233.txt, "r", stdin); #endif while (cin >> n) { if (n == 0) break; q = n * (n - 1) / 2; for (i = 1; i <= q; i++) { int a, b, c; scanf("%d%d%d", &a, &b, &c); g[a][b] = g[b][a] = c; } int c = 0; for (i = 1; i <= n; i++) { for (j = i + 1; j <= n; j++) { edges[c].w = g[i][j]; edges[c].x = i; edges[c].y = j; c++; } } qsort(edges, c, sizeof(edge), cmp); for (i = 1; i <= n; i++) { father[i] = i; } int ans = 0; for (i = 0; i < c; i++) { int x = find(edges[i].x); int y = find(edges[i].y); if (x != y) { ans += edges[i].w; father[x] = y; } } cout << ans << endl; } return 0; }