poj 2377 最大生成树

时间:2022-04-12 11:56:08

#include<stdio.h>

#include<stdlib.h>

#define N 1100

struct node {

int u,v,w;

}bian[110000];

int pre[N];

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

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

}

int find(int x) {

    if(x!=pre[x])

        pre[x]=find(pre[x]);

    return pre[x];

}

int main() {

   int n,m,i,j,a,b,k;

   while(scanf("%d%d",&n,&m)!=EOF) {

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

        pre[i]=i;

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

        scanf("%d%d%d",&bian[i].u,&bian[i].v,&bian[i].w);

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

    j=0;k=0;

    for(i=0;i<m&&j<n-1;i++) {

        a=find(bian[i].u);

        b=find(bian[i].v);

        if(a!=b) {

            pre[a]=b;

            k+=bian[i].w;

            j++;

        }

    }

    if(j==n-1)

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

    else

        printf("-1\n");

   }

return 0;

}