首页 > 其他 > 详细

Kruskal基础最小生成树

时间:2014-03-23 18:41:04      阅读:327      评论:0      收藏:0      [点我收藏+]

http://acm.hdu.edu.cn/showproblem.php?pid=1863

bubuko.com,布布扣
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int f[105];
typedef struct
{
    int x,y,w;
}Edge;
Edge edge[5000];
int find(int x)
{
    if(f[x]!=x)
        f[x]=find(f[x]);
    return f[x];
}
int cmp(Edge a,Edge b)
{
    return a.w<b.w?1:0;
}
int kruskal(int x)
{
    int sum=0;
    for(int i=1;i<=x;i++)
    {
        int f1=find(edge[i].x);
        int f2=find(edge[i].y);
        if(f1!=f2)
        {
            f[f1]=f2;
            sum+=edge[i].w;
        }
    }
    return sum;
}
int main()
{
    //freopen("in.txt","r",stdin);
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==0)  break;
        for(int i=1;i<=m;i++)
            f[i]=i;
        for(int i=1;i<=n;i++)
            scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].w);
        sort(edge+1,edge+n+1,cmp);
        int ans=kruskal(n);
        int cnt=0;
        for(int i=1;i<=m;i++)
            if(f[i]==i)
            cnt++;
        if(cnt>1)
            printf("?\n");
        else
            printf("%d\n",ans);
    }
    return 0;
}
bubuko.com,布布扣

Kruskal基础最小生成树,布布扣,bubuko.com

Kruskal基础最小生成树

原文:http://www.cnblogs.com/lyf123456/p/3618886.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!