这道题比较水。。
让n个点联通,有m条边给你选,让最大的边最小。。
那么至少要n-1条边。。
然后把所有边快排一次。。
用并查集依次问这两点是否联通,不联通就加多这一条边。。
代码比较简单。。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node {
int x,y,d;
}a[1110000];
int n,m;
int fa[1100];
int cmp(const void *xx,const void *yy) {
node n1=*(node *)xx;
node n2=*(node *)yy;
return n1.d-n2.d;
}
int findfa(int x) {
if(x!=fa[x])
fa[x]=findfa(fa[x]);
return fa[x];
}
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].d);
printf("%d ",n-1);qsort(a+1,m,sizeof(node),cmp);
for(int i=1;i<=n;i++)
fa[i]=i;
int ans=0;
for(int i=1;i<=m;i++) {
int aa=findfa(a[i].x);
int bb=findfa(a[i].y);
if(aa!=bb) {
fa[aa]=bb;
ans++;
if(ans==n-1) {
printf("%d\n",a[i].d);
break;
}
}
}
return 0;
}