北大1154

来源:互联网 发布:android跟java? 编辑:程序博客网 时间:2024/05/16 07:10

查找根


#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;int Tree[50];int findRoot(int x){    if(Tree[x]==-1)return x;    else{        int tmp = findRoot(Tree[x]);        Tree[x] = tmp;        return tmp;    }} struct Edge{    int a,b;    int weight;}edge[800];bool cmp(Edge a,Edge b){    return a.weight<b.weight;} int main(){   int n;   char m1,m2;   int k,num;//k为该点后面有几条路   while(scanf("%d",&n)!=EOF&&n!=0){       int size = 0;//边数       for(int i = 1;i<n;i++)      {         scanf(" %c %d",&m1,&k);         for(int j = 1;j<=k;j++)         {             scanf(" %c %d",&m2,&num);             edge[size].a=m1-'A'+1;//点的编号             edge[size].b=m2-'A'+1;             edge[size].weight=num;             size++;         }      }       sort(edge,edge+size,cmp);       for(int i = 1;i<50;i++)           Tree[i]=-1;       int res = 0;       for(int i = 0;i<size;++i)       {           int a = findRoot(edge[i].a);           int b = findRoot(edge[i].b);           if(a!=b)           {              Tree[a]=b;              res+=edge[i].weight;           }       }      printf("%d\n",res);   }   return 0;}


0 0
原创粉丝点击