求助(样例没过)
查看原帖
求助(样例没过)
1135833
xnulhj楼主2024/12/19 17:21

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;
} 
2024/12/19 17:21
加载中...