P2121 拆地毯
题目:
链接https://www.luogu.com.cn/problem/P2121
代码:
#include <bits/stdc++.h>
using namespace std;
struct node{
int x,y,v;
};
bool cmp(node a ,node b){
return a.v > b.v;
}
int n,m,k;
vector<node> e;
int f[100005];
int getf(int x){
if(f[x]==x) return x;
return f[x] = getf(f[x]);
}
bool mer(int x, int y){
int fx = getf(x),fy=getf(y);
if(fx==fy) return false;
if(fx>fy) swap(fx,fy);
f[fx] = fy;
return true;
}
int main()
{
cin >> n >> m>> k ;
for(int i = 1 ; i <= m ; i++){
int x,y,v;
cin >> x >> y >> v;
e.push_back({x,y,v});
}
for(int i = 1 ; i<= n ; i++){
f[i]=i;
}
sort(e.begin(),e.end(),cmp);
int ans = 0,s=0;
for(auto g:e){
if(mer(g.x,g.y)){
ans+=g.v;
s++;
}
if(s==k)break;
}
cout << ans;
return 0;
}