84?
查看原帖
84?
784704
kevin4楼主2023/10/7 21:18
#include<bits/stdc++.h>
using namespace std;
int read() {
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9') {
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
	return x*f;
}
struct Edge {
	int u,v,w;
} edge[200005];
int fa[5005],n,m,ans,eu,ev,cnt;
bool cmp(Edge a,Edge b) {
	return a.w<b.w;
}
int find(int x) {
	while(x!=fa[x]) x=fa[x]=fa[fa[x]];
	return x;
}
void kruskal() {
	sort(edge,edge+m,cmp);
	for(int i=0; i<m; i++) {
		eu=find(edge[i].u), ev=find(edge[i].v);
		if(eu==ev) {
			continue;
		}
		ans+=edge[i].w;
		fa[ev]=eu;
		if(++cnt==n-1) {
			break;
		}
	}
}
int main() {
	n=read(),m=read();
	for(int i=1; i<=n; i++) {
		fa[i]=i;
	}
	for(int i=0; i<m; i++) {
		edge[i].u=read(),edge[i].v=read(),edge[i].w=read();
	}
	kruskal();
	printf("%d",ans);
	return 0;
}
2023/10/7 21:18
加载中...