poj 2377 最大生成树
#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;
}
#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;
}