#include<bits/stdc++.h>
using namespace std ;
using ll = long long;
using PII = pair<int,int>;
//using = pair<int,int>;
using VI = vector<int>;
const ll mod = 998244353;
const int limit = 30000;
int n,m,k;
int x;
struct edge{
int to,from,next;
int val;
bool operator < (const edge &u) const{
return val < u.val;
}
}g[200010];
int f[200010];
inline int fin(int x){
if(x != f[x]) f[x] = fin(f[x]);
return f[x];
}
int main() {
cin>>n>>m>>k;
for(int i=1;i<=m;i++) cin>>g[i].to>>g[i].from>>g[i].val;
for(int i=1;i<=n;i++) f[i] = i;
int ct = 0;
int res = 0;
sort(g+1,g+1+m);
for(int i=1;i<=m;i++){
int a = g[i].to ;
int b = g[i].from ;
if(fin(a) != fin(b)){
f[fin(a)] = fin(b);
ct++;
res += g[i].val;
}
if(ct == n - k) break;
}
if(ct == n-k) cout<<res;
else cout<<"No Answer";
}
纯板子懒得说
n个点分成k堆,n-k+1个构成树,这条树木就有k个边 ,其他全是单点,
跑最小生成树