求21pts
查看原帖
求21pts
777965
c_y_y楼主2023/10/19 13:15
#include<bits/stdc++.h>
using namespace std;
const int N=510;
int k[N][N];
struct node{
	int l,r;
	long long num;
}a[N*N];
int fa[N*N];
inline long long read(){
	long long 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*10+c-'0',c=getchar();
	return x*f;
}
bool cmp(node x,node y){
	return x.num<y.num;
}
int find(int x){
	if(fa[x]!=x) fa[x]=find(fa[x]);
	return fa[x];
}
void merge(int x,int y){
	int fx=find(x),fy=find(y);
	if(fx!=fy) fa[fx]=fy;
}
int main(){
	ios::sync_with_stdio(false),cout.tie(0);
	int n=read(),m=read();
	for(int i=1;i<=m;i++) a[i].l=read(),a[i].r=read(),a[i].num=read();
	sort(a+1,a+m+1,cmp);
	for(int i=1;i<=n;i++) fa[i]=i;
	int cnt=0;
	long long ans=0;
	for(int i=1;i<=n;i++){
		if(find(a[i].l)==find(a[i].r)) continue;
		ans+=a[i].num;
		merge(a[i].l,a[i].r);
		cnt++;
		if(cnt==n-1) break;
	}
	cout<<ans;
	return 0;
}
2023/10/19 13:15
加载中...