#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
using namespace std;
typedef long long ll;
const int N=100;
int fa[N+4];
struct Node{
int u;
int v;
int w;
friend bool operator<(const Node& a,const Node& b){
return a.w<b.w;
}
}node[N<<2];
void into()
{
for(int i=0;i<N;i++){
fa[i]=i;
}
}
int Find(int x)
{
return (fa[x]==x?x:fa[x]=Find(fa[x]));
}
void uino(int x,int y)
{
int fx=Find(x);
int fy=Find(y);
fa[fx]=fy;
}
int main()
{
int i,j,n,m,w;
char ch1,ch2;
ios::sync_with_stdio(false);
while(cin>>n&&n){
into();
int cnt=0;
for(i=1;i<n;i++){
cin>>ch1>>m;
for(j=1;j<=m;j++){
cin>>ch2>>w;
cnt++;
node[cnt].u=ch1-'A';
node[cnt].w=w;
node[cnt].v=ch2-'A';
}
}
sort(node+1,node+cnt+1);
int sum=0;
int edge=0;
for(i=1;i<=cnt;i++){
if(edge==n-1) break;
if(Find(node[i].u)!=Find(node[i].v)){
uino(node[i].u,node[i].v);
edge++;
sum=sum+node[i].w;
}
}
cout<<sum<<endl;
}
}
最小生成树
最新推荐文章于 2024-10-25 16:21:17 发布