如何判断orz
查看原帖
如何判断orz
759399
chenzhiyuan0923楼主2022/10/16 20:22
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
const int maxv=2e5+10;
long long n,m,f[maxv];
long long ans;
struct edge{
	int u,v,w;
};
edge g[maxn];
bool cmp(edge a,edge b){
	return a.w<b.w;
}
int find(int a){
	if(f[a]==a) return a;
	f[a]=find(f[a]);
	return f[a];
}
void kruskal(){
	int cnt=0;
	for(int i=1;i<=n;i++) f[i]=i;
	for(int i=1;i<=m;i++) {
		int x=g[i].u,y=g[i].v;
		int fx=find(x);
		int fy=find(y);
		if(fy!=fx){
			f[fx]=fy;
			ans+=g[i].w;
			cnt++;
		}
		if(cnt==n-1) break; 
	} 
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++) 
		scanf("%d%d%d",&g[i].u,&g[i].v,&g[i].w);
	sort(g+1,g+1+m,cmp);
	kruskal();
	cout<<ans;
}
2022/10/16 20:22
加载中...