[Time Gate]
https://www.luogu.org/problemnew/show/P1195
【解题思路】
这一题是裸的最小生成树
需要生成的棉花糖数大于云彩原料总数的情况"No Answer"
【code】
1 // luogu-judger-enable-o2 2 #include <cstdio> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 int n,m,k,ans,fa[10005],cnt; 7 struct Node{ 8 int x; 9 int y; 10 int l; 11 }a[10005]; 12 inline bool cmp(const Node &a,const Node &b){ 13 return a.l<b.l; 14 } 15 inline int Find(int i){ 16 if(fa[i]==i)return i; 17 return fa[i]=Find(fa[i]); 18 } 19 int main(){ 20 //freopen(".in","r",stdin); 21 //freopen(".out","w",stdout); 22 scanf("%d%d%d",&n,&m,&k); 23 for(register int i=1;i<=m;i++) 24 scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].l); 25 sort(a+1,a+m+1,cmp); 26 for(register int i=1;i<=m;i++) 27 fa[i]=i; 28 cnt=n; 29 for(register int i=1;i<=m;i++){ 30 int f1,f2; 31 f1=Find(a[i].x); 32 f2=Find(a[i].y); 33 if(f1!=f2){ 34 fa[f1]=f2; 35 cnt--; 36 ans+=a[i].l; 37 } 38 if(cnt==k)break; 39 } 40 if(ans==0)printf("No Answer\n"); 41 else printf("%d\n",ans); 42 return 0; 43 }