口袋的天空

[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 }

 

posted @ 2019-07-15 12:20  GTR_PaulFrank  阅读(142)  评论(0编辑  收藏  举报