hdu 1301

来源:互联网 发布:阿里云怎么绑定域名 编辑:程序博客网 时间:2024/06/08 01:24
点击打开链接//kruskal 并查集#include <iostream>#include<cstdio>#include<algorithm>using namespace std;const int maxn=100+5;                //可能的最大边数struct Edge{int from,to;int weight;};bool operator<(const Edge& E1,const Edge &E2){    return E1.weight<E2.weight;}Edge edges[maxn];int parent[maxn];int find(int x){    return x==parent[x]?x:parent[x]=find(parent[x]);}int main(){    int v;    while(scanf("%d",&v)==1&&v)    {        for(int i=1;i<=v;i++)            parent[i]=i;        int ans=0;        for(int i=0;i<v-1;i++)        {            char a,b;            int k,m;            cin>>a>>k;            while(k--)            {                cin>>b>>m;                edges[ans].from=a-'A'+1;                edges[ans].to=b-'A'+1;                edges[ans].weight=m;                ans++;            }        }        sort(edges,edges+ans);        int sum=0;        for(int i=0;i<ans;i++)        {            int p1=find(edges[i].from);            int p2=find(edges[i].to);            if(p1==p2) continue;            parent[p1]=p2;            sum+=edges[i].weight;        }        printf("%d\n",sum);    }    return 0;}

原创粉丝点击