HDU 1301 Jungle Roads

来源:互联网 发布:medea软件 编辑:程序博客网 时间:2024/06/06 01:40

//最小生成树水题//

AC代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define N 20000char s1[8],s2[8];int L,p[N],n;struct node{    int w,v,c;}t[N];int cmp(node p,node q){    return p.c<q.c;}int find(int k){    if(p[k]==k)    {        return p[k];    }    else    {        return find(p[k]);    }}int cl(){    int sum=0,cnt=0;    for(int i=0;i<L;i++)    {        int x=find(t[i].w);        int y=find(t[i].v);        if(x!=y)        {            p[y]=x;            sum+=t[i].c;            cnt++;        }        if(cnt==n-1)            return sum;    }    return sum;}int main(){    while(scanf("%d",&n)!=EOF&&n)    {        int i,j;        int k1,k2;        for(i=0;i<=n;i++)        {            p[i]=i;        }        L=0;        for(i=0;i<n-1;i++)        {            scanf("%s%d",s1,&k1);            for(j=0;j<k1;j++)            {                scanf("%s%d",s2,&k2);                t[L].w=s1[0]-'A'+1;                t[L].v=s2[0]-'A'+1;                t[L].c=k2;                L++;            }        }        sort(t,t+L,cmp);        printf("%d\n",cl());    }    return 0;}


0 0