【模版】最小生成树 kruskal

【模版】最小生成树 kruskal

#include<bits/stdc++.h>
using namespace std;
int n,e,f[1000001],c[1000001],d[1000001],sum;
struct road{
	int x,y,w;
}a[5000005];
bool cmp(road x,road y){
	return x.w<y.w;
}
int fi(int x){
	if(x==f[x]){
		return x;
	}
	return f[x]=fi(f[x]);
}
void hb(int x,int y){
	int xx=fi(x);
	int yy=fi(y);
	if(xx!=yy){
		f[xx]=yy;
	}
	return;
}
int main(){
	cin>>n>>e;
	for(int i=1;i<=n;i++){
		f[i]=i;
	}
	for(int i=1;i<=e;i++){
		cin>>a[i].x>>a[i].y>>a[i].w;
	}
	sort(a+1,a+e+1,cmp);
	for(int i=1;i<=e;i++){
		if(fi(a[i].x)!=fi(a[i].y)){
		    hb(a[i].x,a[i].y);
			sum=a[i].w;
			n--;
		}
		if(n==1){
		    cout<<sum<<endl;
			return 0;
		}
	}
	cout<<-1<<endl;
	return 0;
}

模版练习题推荐

洛谷

Libre OJ

posted @ 2023-12-10 11:15  吃瓜猫linch  阅读(18)  评论(0)    收藏  举报