最小生成树版子题
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,k,ans,fa[10005],cnt;
struct Node{
int x;
int y;
int l;
}a[10005];
inline bool cmp(const Node &a,const Node &b){
return a.l<b.l;
}
inline int Find(int i){
if(fa[i]==i)return i;
return fa[i]=Find(fa[i]);
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(register int i=1;i<=m;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].l);
sort(a+1,a+m+1,cmp);
for(register int i=1;i<=m;i++)
fa[i]=i;
cnt=n;
for(register int i=1;i<=m;i++){
int f1,f2;
f1=Find(a[i].x);
f2=Find(a[i].y);
if(f1!=f2){
fa[f1]=f2;
cnt--;
ans+=a[i].l;
}
if(cnt==k)break;
}
if(ans==0)printf("No Answer\n");
else printf("%d\n",ans);
return 0;
}
原文:https://www.cnblogs.com/ainiyuling/p/11188159.html