HDU 1879 继续畅通工程

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

最小生成树。。。m,n又看反了。。。无语ing

View Code
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int idx[1000000];

struct node{

    int a,b,cost;

    int st;

}r[1000000];

int cmp(const void*a,const void*b)

{

    return (*(struct node*)a).cost-(*(struct node*)b).cost;

}

int find(int n)

{

    return idx[n]==n?n:idx[n]=find(idx[n]);

}

int main()

{

    int i,n,m;

    int p,q;

    while(scanf("%d",&n),n)

    {

        for(i=1;i<=n;i++)

            idx[i]=i;

        m=n*(n-1)/2;

        for(i=0;i<m;i++)

        {

            scanf("%d%d%d%d",&r[i].a,&r[i].b,&r[i].cost,&r[i].st);

            if(r[i].st)r[i].cost=0;

        }

        qsort(r,m,sizeof(r[0]),cmp);

        int cost=0;

        for(i=0;i<m;i++)

        {

               p=find(r[i].a);

            q=find(r[i].b);

            if(p!=q)

            {

                cost+=r[i].cost;

                 idx[p]=q;

              }

           }

        printf("%d\n",cost);

    }

    return 0;

}

 

你可能感兴趣的:(HDU)