POJ 1251

来源:互联网 发布:手机桌面软件推荐 编辑:程序博客网 时间:2024/06/02 18:31
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int n,p[100],k;struct Edge{  int u,v,w;}edge[10000];bool cmp(Edge a,Edge b){  return a.w<b.w;}int find(int x){  return p[x]==x?x:p[x]=find(p[x]);}int kruskal(){  int ans=0,num=0;  for(int i=1;i<=n;i++)  p[i]=i;  sort(edge,edge+k,cmp);  for(int i=0;i<k;i++)  {    int p1=find(edge[i].u);    int p2=find(edge[i].v);    if(p1!=p2){  ans+=edge[i].w;  num++;  p[p1]=p2;}if(num==n-1) return ans;  }}int main(){while(scanf("%d",&n)!=EOF&&n){      char c;  k=0;  int num,dis;  for(int i=1;i<=n-1;i++)  {    scanf(" %c%d",&c,&num);    int from=c-'A'+1;    while(num--){  getchar();  scanf(" %c%d",&c,&dis);  edge[k].u=from;  edge[k].v=c-'A'+1;  edge[k].w=dis;  //cout<<edge[k].u<<" "<<edge[k].v<<endl;  k++;}  }  int ans = kruskal();  printf("%d\n",ans);}return 0;}

                                             
0 0
原创粉丝点击