kruskal
不输出结果
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,m;
int fa[N];
struct edge{
int u,v,c;
}g[N];
int num;
void add(int x,int y,int z){
num++;
g[num].u=x;
g[num].v=y;
g[num].c=z;
}//加入
bool cmp(edge x,edge y){
return x.c<y.c;
}//排序函数
void init(){
for(int i=1;i<=m;i++){
fa[i]=i;
}
}//初始化
int find(int x){
if(fa[x]==x){
return x;
}
fa[x]=find(fa[x]);
return fa[x];
}//并查集查找
void merge(int x,int y){
fa[find(x)]=find(y);
}//合并
void kruskal(){
int tot=0;
int ans=0;
for(int i=1;i<=m;i++){
int dx=find(g[i].u),dy=find(g[i].v);
if(dx!=dy){
merge(dx,dy);
tot++;
ans=max(ans,g[i].c);
}
if(tot==n-1){
cout<<tot<<" "<<ans;
return;
}
}
}//kruskal
int s1,s2,s3;
int main(){
cin>>n>>m;
init();
while(m--){
cin>>s1>>s2>>s3;
add(s1,s2,s3);
}
sort(g+1,g+m+1,cmp);
kruskal();
return 0;
}