HDU 1233 还是畅通工程 (Kruskal)

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

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>

using namespace std;

struct node
{
    int u;
    int v;
    int w;
}e[10005];
int n;
int f[10000];

int cmp(node a,node b)
{
    return a.w<b.w;
}

int init()
{
    for(int i=0;i<=n;i++)
        f[i]=i;
}

int getf(int v)
{
    if(f[v]==v)
        return v;
    else
    {
        f[v]=getf(f[v]);
        return f[v];
    }
}

int merge(int v,int u)
{
    int t1,t2;
    t1=getf(v);
    t2=getf(u);
    if(t1!=t2)
    {
        f[t2]=t1;
        return 1;
    }
    return 0;
}

int main()
{
    while(~scanf("%d",&n))
    {
        if(n==0)
            break;
        init();
        int m=n*(n-1)/2;

        for(int i=0;i<m;i++)
        {
            scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
        }

        sort(e,e+m,cmp);
        int count=0;
        int sum=0;
        for(int i=0;i<m;i++)
        {
            if(merge(e[i].u,e[i].v))
            {
                //printf("1\n");
                count++;
                sum=sum+e[i].w;
            }
            if(count==n-1)
            {
                break;
            }
        }

        printf("%d\n",sum);
    }
}


你可能感兴趣的:(HDU 1233 还是畅通工程 (Kruskal))