#include<iostream> #include<vector> #include<algorithm> using namespace std; int father[200]; int findFather(int x) { if (x == father[x]) { return x; } else { father[x] = findFather(father[x]); return father[x]; } } void unionFather(int x,int y) { int x_father = findFather(x); int y_father = findFather(y); father[y_father] = father[x_father]; } struct Edge { int U, V; int weight; Edge(int a, int b, int c) { U = a; V = b; weight = c; } }; bool cmp(Edge a, Edge b) { return a.weight < b.weight; } int main() { int N; while (scanf("%d", &N)!=EOF) { if (N == 0) { break; } for (int i = 0; i < 200; i++) { father[i] = i; } vector<Edge>edge_list; for(int i=0;i< N*(N - 1) / 2;i++) { int U, V, weight; scanf("%d %d %d", &U, &V, &weight); edge_list.push_back(Edge(U, V, weight)); } sort(edge_list.begin(), edge_list.end(), cmp); int sum_weight = 0; int edge_count = 0; for (int i = 0; i < edge_list.size(); i++) { Edge temp_edge = edge_list[i]; if (findFather(temp_edge.U) == findFather(temp_edge.V)) { continue; } else { unionFather(temp_edge.U, temp_edge.V); sum_weight = sum_weight + temp_edge.weight; edge_count++; } if (edge_count == N - 1) { break; } } cout << sum_weight << endl; } }