博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1195 口袋的天空(最小生成树)
阅读量:6280 次
发布时间:2019-06-22

本文共 1272 字,大约阅读时间需要 4 分钟。

嗯...

 

题目链接:https://www.luogu.org/problemnew/show/P1195

 

思路:

首先可以判断这道题是用最小生成树来做的,然后在将其合并时用ans记录一下它的总消耗,然后用一个sum记录一下一共将几块云朵合并在了一起....

每合并完一次,都要进行判断(k是否等于n-sum,即是否已经合并成了k块棉花糖),如果已符合题意,则return即可。这是这道题的一个重点,否则会继续跑下去....

 

AC代码:

1 #include
2 #include
3 #include
4 5 using namespace std; 6 7 int f[10005], sum, ans; 8 9 struct node{10 int x, y, l;11 } a[10005];12 13 inline int cmp(node i, node j){14 return i.l < j.l;15 }16 17 inline int find(int x){18 if(f[x] != x)19 f[x] = find(f[x]);20 return f[x];21 }22 23 int main(){24 int n, m, k;25 scanf("%d%d%d", &n, &m, &k);26 for(int i = 1; i <= m; i++)27 scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].l);28 for(int i = 1; i <= n; i++)29 f[i] = i;30 sort(a+1, a+m+1, cmp);31 for(int i = 1; i <= m; i++){32 int r1 = find(a[i].x);33 int r2 = find(a[i].y);34 if(r1 != r2){35 f[r1] = r2;36 sum++;37 ans += a[i].l;38 }39 if(k == n - sum){ //是否已经合并成k块棉花糖 40 printf("%d", ans);41 return 0;42 }43 }44 printf("No Answer");45 return 0;46 }
AC代码

 

转载于:https://www.cnblogs.com/New-ljx/p/10800863.html

你可能感兴趣的文章
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>
从源码剖析useState的执行过程
查看>>
地包天如何矫正?
查看>>
中间件
查看>>
Android SharedPreferences
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>