原题链接:https://www.nowcoder.com/practice/d6bd75dbb36e410995f8673a6a2e2229?tpId=40&tqId=21479&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
const int inf = 0x3f3f3f3f;
typedef long long ll;
typedef unsigned long long ull;
const ll N = 1e4;
const ll MAXN = 1e6+10;
int fa[N];
int findFather(int x)
{
if(fa[x] == -1)
return x;
else
{
int tmp = findFather(fa[x]);
fa[x] = tmp;
return tmp;
}
}
struct Edge{
int v1, v2;
int cost;
bool operator < (const Edge A) const{
return cost < A.cost;
}
}edge[60000];
// bool cmp(Edge a, Edge b)
// {
// return a.cost < b.cost;
// }
int main()
{
int n;
while(cin >> n && n != 0)
{
int num = n * (n - 1) / 2;
for(int i=1; i <= num; i++)
{
cin >> edge[i].v1 >> edge[i].v2 >> edge[i].cost;
}
sort(edge+1, edge + 1 + num);
memset(fa, -1, sizeof(fa));
int ans = 0;
for(int i=1; i <= num; i++)
{
int a = findFather(edge[i].v1);
int b = findFather(edge[i].v2);
if(a != b)
{
fa[a] = b;
ans += edge[i].cost;
}
}
cout << ans << endl;
}
return 0;
}