POJ1287_最小生成树-Networking

来源:互联网 发布:淘宝美国代购推荐 编辑:程序博客网 时间:2024/06/06 01:24

题目链接:http://poj.org/problem?id=1287

题意:输入N,M N表示顶点数目 ,M表示边数

下面M行每行输入起点、终点、权值

直接套用Kruskal算法

#include<cstdio>#include<algorithm>const int N=10000;int parent[N];struct Edge{    int s,e,dis;    bool operator<(const Edge &b)const{    return dis<b.dis;    }}edge[N];int find(int x){    return x==parent[x]?x:find(parent[x]);}int kruskal(int n){    int ans=0;    for(int i=0;i<N;++i)parent[i]=i;    std::sort(edge,edge+n);    for(int i=0;i<n;++i){        int x=find(edge[i].s);        int y=find(edge[i].e);        if(x!=y){            ans+=edge[i].dis;            parent[y]=x;        }    }    return ans;}int  main(){    int n,v,dis,s,e;    while(scanf("%d",&v),v){            scanf("%d",&n);            for(int i=0;i<n;++i){                scanf("%d %d %d",&s,&e,&dis);                edge[i].s=s,edge[i].e=e,edge[i].dis=dis;            }            printf("%d\n",kruskal(n));    }}


0 0
原创粉丝点击