#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n,m,set[124];
struct val
{
int x,y,v;
}e[10010];
int find(int x)
{
return set[x]==x?x:set[x]=find(set[x]);
}
int kruskal()
{
int sum=0;
for(int i=1;i<=m;i++)
{
int x=e[i].x,y=e[i].y,v=e[i].v;
int a=find(x),b=find(y);
if(a!=b)
{
set[b]=a;
sum+=v;
}
}
return sum;
}
int cmp(const void *a,const void *b)
{
return ((val *)a)->v-((val *)b)->v;
}
int main()
{
int x,y,v;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1;i<=n;i++)//初始化
{
set[i]=i;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&v);
e[i].x=x;
e[i].y=y;
e[i].v=v;
}
qsort(e+1,n,sizeof(e[0]),cmp);快排
int res=kruskal();
printf("%d\n",res);
}
system("pause");
return 0;
}
# include<stdio.h>
# include<iostream>
# include<algorithm>
using namespace std;
int a[105];
struct bian
{
int v, u;
int w;
}s[105];
int find(int x)
{
if(a[x] == x)
return a[x];
return find(a[x]);
}
void bin(int x, int y)
{
if(x > y)
a[x] = y;
else
a[y] = x;
}
bool cmp(bian x, bian y)
{
return x.w < y.w;
}
int kruskal(int m, int n)
{
sort(s, s+n, cmp);
int ss = 0;
for(int i = 0; i < n; i ++)
{
int x , y;
x = find(s[i].u);
y = find(s[i].v);
if(x != y)
{
bin(x, y);
ss += s[i].w;
}
}
return ss;
}
int main()
{
int n;
while(cin>>n && n)
{
char ch1, ch2;
int m, p, q, i = 0, ss;
ss = n;
for(int i = 1; i <= n; i++)
a[i] = i;
while(--ss)
{
cin>>ch1>>m;
while(m --)
{
s[i].u = ch1 - 'A' + 1;
cin>>ch2>>s[i].w;
s[i].v = ch2 - 'A' + 1;
i ++;
}
}
int ans = kruskal(n, i);
printf("%d\n", ans);
}
return 0;
}