#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
typedef struct rode
{
int c1, c2, cost;
}rode;
int S[100];
rode city[100];
int find(int x)
{
if(S[x]==-1) return x;
return S[x]==find(S[x]);
}
int compare(const rode &a, const rode &b)
{
if(a.cost < b.cost)
return 1;
return 0;
}
bool marge(int x, int y)
{
int m = find(x);
int n = find(y);
if(m == n) return 0;
if(m<n) S[x] = y;
else S[y] = x;
return 1;
}
int main()
{
int N;
char c;
int number, W;
int t, sum;
while(scanf("%d",&N)&&N)
{ t =0; sum =0;
getchar();
for(int i=0; i<N-1; i++)
{
scanf("%c %d",&c, &number);
t+=number;
for(int j=0; j<number; j++)
{
scanf(" %c %d",&c,&W);
city[i].c1 = i;
city[i].c2 = j-'A';
city[i].cost = W;
}
getchar();
}
memset(S, -1, sizeof(S));
sort(city,city+t,compare);
for(int i=0; i<t; i++)
if(marge(city[i].c1, city[i].c2))
{
sum+=city[i].cost;
}
printf("%d\n",sum);
}
system("pause");
return 0;
}
题目 点击打开链接