地址: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; }