社区讨论

kruskal 84 pts WA on case 13 玄关

P3366【模板】最小生成树参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhizp3o8
此快照首次捕获于
2025/11/03 18:20
4 个月前
此快照最后确认于
2025/11/03 18:20
4 个月前
查看原帖
马蜂良好
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;
class DSU{
	private:
		static const int MAXN=1e7;
		static int fa[MAXN];
	public:
		int find(int x){
			if(fa[x]!=x) fa[x]=find(fa[x]);
			return fa[x];
		}
		void merge(int x,int y){
			fa[x]=y;
		}
		void init(int n){
			for(int i=1;i<=n;i++) fa[i]=i;
		}
};
int DSU::fa[DSU::MAXN];
namespace kruskal{
	DSU dsu;
	const int MAXN=5002,MAXM=2e5+2;
	struct E{
		int u,v,w;
	}edge[MAXM];
	int n,m,k=0,ans=0;
	void init(){
		cin >>n >>m;
		dsu.init(n);
		for(int i=1;i<=m;i++) cin >>edge[i].u >>edge[i].v >>edge[i].w;
		sort(edge+1,edge+m+1,[](E &i,E &j){
			return i.w<j.w;
		});
	}
	void kruskall(){
		for(int i=1;i<=m;i++){
			int eu=dsu.find(edge[i].u),ev=dsu.find(edge[i].v);
			if(eu!=ev){
				dsu.merge(eu,ev);
				ans+=edge[i].w;
				k++; 
				if(k==n-1){
					cout <<ans <<endl;
					return ;
				}
			}
		}
	}
}
using namespace kruskal; 
signed main(){
	cin.tie(0)->sync_with_stdio(false);
	init();
	kruskall();
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...