70求调
  • 板块P2121 拆地毯
  • 楼主Statax
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/5/12 22:35
  • 上次更新2024/5/13 13:41:43
查看原帖
70求调
1113126
Statax楼主2024/5/12 22:35
#include <bits/stdc++.h>
using namespace std;
const int N=100005;
const int mod=998244353;
const int inf=0x7f7f7f7f;
typedef long long ll;

struct DSU {
	int fa[N];
	void merge(int x,int y) {fa[x]=y;}
	void init(int n) {for(int i=1;i<=n;i++) fa[i]=i;}
	int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);}
}dsu;
struct Edge {
	int u,v;ll w;
	bool operator<(Edge b) const {
		return w>b.w;
	}
}e[N];

void kruskal_solve(int n,int m,int k) {
	ll sum=0;sort(e+1,e+n+1);dsu.init(n);
	if(k>=n)puts("0"),exit(0);
	for(int i=1;i<=m;i++) {
		if(!k) break;
		int u=dsu.find(e[i].u);
		int v=dsu.find(e[i].v);
		if(u!=v) sum+=e[i].w,k--,dsu.merge(u,v);
	}	
	cout<<sum<<endl;
}

int main() {
	//freopen("test.in","r",stdin);
	//freopen("test.out","w",stdout);
	int ___=1;
	while(___--) {
		int n,m,k;cin>>n>>m>>k;
		for(int i=1;i<=m;i++) cin>>e[i].u>>e[i].v>>e[i].w;
		kruskal_solve(n,m,k);
	}
	return 0;
}

死活都是70……

2024/5/12 22:35
加载中...