#include<cstdio>
#include<algorithm>
#include<iostream>
#define N 2500
using namespace std;
//定义边的结构体
struct edge{
int u,v;
int cost;
bool operator < (const edge &b)const{
return cost < b.cost;
}
}E[N];
int father[105];
int findFather(int x){
if(father[x] == x) return x;
else{
int tp = findFather(father[x]);
father[x] = tp;
return tp;
}
}
int main(){
int n;
while(cin>>n){
if(n==0) break;
int num = 0; //k表示与它相连的边 num用来记录边的条数
char u,v;
for(int i = 0;i < (n-1);i++){
int k;
cin>>u>>k;
for(int j = 0;j < k;j++){
cin>>v>>E[num].cost;
E[num].u = u - 'A' + 1;
E[num].v = v - 'A' + 1;
num++;
}
}
sort(E,E+num);
for(int i = 1;i <= n;i++){
father[i] = i;
}
int ans = 0;
for(int i=0;i<num;i++){
int faU = findFather(E[i].u);
int faV = findFather(E[i].v);
if(faU != faV){
father[faU] = faV;
ans += E[i].cost;
}
}
cout<<ans<<endl;
}
return 0;
}
Jungle Roads【北京大学】
最新推荐文章于 2021-07-29 19:22:22 发布