这道题和POJ的1251一毛一样
一道最小生成树。
AC代码
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int a,b;
int len;
}p[2400];
int pre[28],n,ans;
int find(int x){
return x==pre[x] ? x : pre[x]=find(pre[x]) ;
}
int Union(int x,int y){
int rootx=find(x);
int rooty=find(y);
if(rootx==rooty){
return 0;
}else{
pre[rooty]=rootx;
}
return 1;
}
bool cmp(node x,node y){
return x.len<y.len;
}
void Init(){
ans=0;
for(int i=0;i<=27;i++){
pre[i]=i;
}
}
int main()
{
while(~scanf("%d",&n)&&n){
Init();
int q=0;
for(int i=0;i<n-1;i++){
char a,b;
int m,len;
getchar();
scanf("%c%d",&a,&m);
while(m--){
getchar();
scanf("%c%d",&b,&len);
p[q].a=(a-'A'); p[q].b=(b-'A');
p[q].len=len;
q++;
}
}
sort(p,p+q,cmp);
for(int i=0;i<q;i++){
if(Union(p[i].a,p[i].b)) ans+=p[i].len;
}
printf("%d\n",ans);
}
return 0;
}