地址:http://ybt.ssoier.cn:8088/problem_show.php?pid=1392
#include<bits/stdc++.h>
using namespace std;
int n,m,num;
struct edge{
int a,b,c;
}mp[90005];//边存放
bool cmp(edge a,edge b){//比较函数
return a.c<b.c;
}
int father[305];
int findfather(int x){//并查集
if(father[x]!=x) father[x]=findfather(father[x]);
else return father[x];
}
int kruskal(int n,int m){//核心代码
int maxe=-1;
num=0;
for(int i=1;i<=n;i++){
father[i]=i;
}
sort(mp+1,mp+m+1,cmp);
for(int i=1;i<=m;i++){
if(findfather(mp[i].a)!=findfather(mp[i].b)){
father[findfather(mp[i].a)]=findfather(mp[i].b);
num++;
maxe=max(maxe,mp[i].c);
if(num==n-1) break;
}
}
return maxe;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
mp[i].a=u;
mp[i].b=v;
mp[i].c=w;
}
int MAXE=kruskal(n,m);
cout<<num<<" ";
cout<<MAXE;
return 0;
}