P3366 【模板】最小生成树

#include<bits/stdc++.h>
using namespace std;
int n,m,ans=1,ans1=0,f[100001];
struct node {
	int x,y,t;
} a[1000010];
int cmp(node x,node y) {
	if(x.t<y.t) return 1;
	return 0;
}
int find(int num) {
	if(f[num]==num) return num;
	return f[num]=find(f[num]);
}
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++) {
		f[i]=i;
	}
	for(int i=1; i<=m; i++) {
		cin>>a[i].x>>a[i].y>>a[i].t;
	}
	sort(a+1,a+1+m,cmp);
	for(int j=1; j<=m; j++) {
		int o=find(a[j].x);
		int p=find(a[j].y);	
		if(o!=p) {
			f[o]=f[p];
			ans++;
		ans1+=a[j].t;
		}
		if(ans==n){
			cout<<ans1;
			return 0;
		}
	}
	cout<<"orz";
	return 0;
}

posted @ 2024-01-25 10:45  Arthur_Douglas  阅读(16)  评论(0编辑  收藏  举报