getchar()在poj上过不了,在hdu上就能过
没办法,把scanf 换成 cin 了。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<iostream>
using namespace std;
int parent[30];
int root(int p)
{
if(parent[p]==-1) return p;
else return parent[p]=root(parent[p]);
}
void merge(int a,int b)
{
a=root(a);
b=root(b);
parent[a]=b;
}
struct pos{
int a,b,len;
}p[100];
int comp(const void *a,const void *b)
{
return (((struct pos *)a)->len)-(((struct pos *)b)->len);
}
int main()
{
int i,j,k;
int n,b,d;
char a,c;
while(scanf("%d",&n),n)
{
int flag=0;
for(i=1;i<n;i++)
{
cin>>a>>b;
a=a-'A'+1;
for(j=0;j<b;j++)
{
cin>>c>>d; //坑爹啊!!
c=c-'A'+1;
p[flag].a=a;
p[flag].b=c;
p[flag].len=d;
flag++;
}
}
int sum=0;
memset(parent,-1,sizeof(parent));
qsort(p,flag,sizeof(struct pos),comp);
for(i=0;i<flag;i++)
{
if(root(p[i].a)!=root(p[i].b))
{
merge(p[i].a,p[i].b);
sum+=p[i].len;
}
}
printf("%d\n",sum);
}
}