why 70pts???
查看原帖
why 70pts???
1268524
DX3906_ourstar楼主2024/8/2 10:52

rt,我不是很能理解

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define re register
using namespace std;

const int N = 1e6 + 5;

int n,m,k,ans/*,cnt*/;
int fa[N];

inline int find(int x){
	if(x == fa[x]){
		return x;
	}else{
		return fa[x] = find(fa[x]);
	}
}

struct edge{
	int u,v,w;
}e[N];

inline bool cmp(edge a,edge b){
	return a.w > b.w;
}

inline void cs(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
}

int main(){
	cs();
	cin>>n>>m>>k;
	for(re int i = 1;i <= n;i ++){
		fa[i] = i;
	}
	for(re int i = 1;i <= m;i ++){
		int u,v,w;
		cin>>u>>v>>w;
		e[i].u = u;
		e[i].v = v;
		e[i].w = w;
	}
	sort(e + 1,e + n + 1,cmp);
	for(re int i = 1;i <= m && k != 0;i ++){
		int x = find(e[i].u);
		int y = find(e[i].v);
		if(x != y){
			fa[x] = y;
			k --;
			ans += e[i].w; 
		}
	}
	cout<<ans<<"\n";
	return 0;
}
2024/8/2 10:52
加载中...