杭电 1233 还是畅通工程

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int inf=0x7fffffff;

int set[110];

struct val

{

    int x,y,v;

}e[10000];

int n,m;

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

{

     return ((val *)a)->v - ((val *)b)->v;//注意加括号。 

}

int find(int a)

{

     return set[a]==a?a:find(set[a]);

}

int kruskal()

{

    int sum=0;

    for(int i=1;i<=m;i++)

    {

         int x=e[i].x,y=e[i].y,v=e[i].v;

         int a=find(x),b=find(y);

         if(a!=b)

         {

              set[a]=b;

              sum+=v;

         }

    }

    return sum;

}

int main()

{

    int x,y,v;

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

     {

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

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

         {

              set[i]=i;

         } 

         for(int i=1;i<=m;i++)

         {

              scanf("%d%d%d",&x,&y,&v);

              e[i].x=x;

              e[i].y=y;

              e[i].v=v;

         }

         qsort(e+1,m,sizeof(e[0]),cmp);

         int res=kruskal();

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

     }

     //system("pause");

     return 0;

}

编辑器加载中...

你可能感兴趣的:(杭电)