【求助】克鲁斯卡尔算法,50分
查看原帖
【求助】克鲁斯卡尔算法,50分
586924
封禁用户楼主2022/6/16 23:15
#include<bits/stdc++.h>
using namespace std;
const int N=1e2+5,M=1e5+5;
int n,m,ans=0;
int fa[N];
struct Edge{
	int u;
	int v;
	int w;
};
Edge e[M];
bool operator <(Edge a,Edge b){
	return a.w<b.w;
}
int find(int x){
	if(fa[x]==x){
		return x;
	}
	return fa[x]=find(fa[x]);
}
int krs(){
	for(int i=1;i<=n;++i){
		fa[i]=i;
	}
	int cnt=0;
	for(int i=1;i<=m;++i){
		int u=e[i].u,v=e[i].v,w=e[i].w;
		int x=find(u),y=find(v);
		if(x!=y){
			fa[x]=y;
			ans=max(ans,w);
			++cnt;
		}
		if(cnt==n-1){
			break;
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;++i){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		e[i]=(Edge){u,v,w};
	}
	sort(e+1,e+m+1);
	printf("%d ",n-1);
	krs();
	printf("%d",ans);
	return 0;
}
2022/6/16 23:15
加载中...