hdu 1233 还是畅通工程

来源:互联网 发布:网络骗局大全 编辑:程序博客网 时间:2024/06/06 14:04

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233

题目思路:建设公路把村庄连接起来,求路的最小总长度。求最小生成树,方法就是Kruskal算法。。

AC代码:

#include<stdio.h>#include<stdlib.h>int f[105];int find(int a){    if(f[a]!=a)        f[a]=find(f[a]);    return f[a];}struct hh{    int a,b;    int w;}road[5000];int cmp(const void *a,const void *b){     return ( *(struct hh *)a).w - (*(struct hh *)b).w;}int main(){    int i,n,j;    while(~scanf("%d",&n),n)    {        for(i=0;i<n*(n-1)/2;i++)            scanf("%d%d%d",&road[i].a,&road[i].b,&road[i].w);        for(i=0;i<100;i++)            f[i]=i;        qsort(road,n*(n-1)/2,sizeof(road[0]),cmp);        int fa,fb,ans=0;        for(j=0,i=0;i<n*(n-1)/2;i++)        {            fa=find(road[i].a);            fb=find(road[i].b);            if(fa!=fb)            {                ans+=road[i].w;                f[fa]=fb;                j++;                if(j>=n-1)break;            }        }        printf("%d\n",ans);    }    return 0;}


AC截图:



0 0
原创粉丝点击