Jungle Roads Kruskal模板

来源:互联网 发布:华网1588建站 编辑:程序博客网 时间:2024/05/17 01:01
#include <stdio.h>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn=101;struct edge{    int from,to,w,next;} e[maxn<<1];int f[maxn];int t;void add(int i,int j,int w){    e[t].from=i;    e[t].to=j;    e[t].w=w;    t++;}bool cmp(struct edge a,struct edge b){    if(a.w!=b.w) return a.w<b.w;}int find(int x){    if(x!=f[x])        f[x]=find(f[x]);    return f[x];}void un(int x,int y){    x=find(x);    y=find(y);    if(x==y) return ;    f[y]=x;}int main(){    int n,num,d;    char c,city;    while(scanf("%d",&n)==1 && n)    {        t=1;        memset(e,0,sizeof(e));        for(int i=1; i<n; i++)        {            cin >> c >> num;            while(num--)            {                cin >> city >> d;                add(c-'A'+1,city-'A'+1,d);            }        }        for(int i=1; i<=n; i++)            f[i]=i;        sort(e+1,e+t+1,cmp);        int ans=0,x,y;        for(int i=1; i<=t; i++)        {            x=find(e[i].from);            y=find(e[i].to);            if(x!=y) un(x,y),ans+=e[i].w;        }        printf("%d\n",ans);    }    return 0;}

原创粉丝点击