洛谷 P1195 口袋的天空
题目链接
https://www.luogu.org/problemnew/show/P1195
题目背景
小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。
有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。
题目描述
给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在一起。
现在小杉要把所有云朵连成KK个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。
输入输出格式
输入格式:
每组测试数据的
第一行有三个数N,M,K(1≤N≤1000,1≤M≤10000,1≤K≤10)
接下来M个数每行三个数X,Y,L表示X云和Y云可以通过L的代价连在一起。(1≤X,Y≤N,0≤L<10000)
30%的数据N <= 100,M <= 1000,N≤100,M≤1000
输出格式:
对每组数据输出一行,仅有一个整数,表示最小的代价。
如果怎么连都连不出K个棉花糖,请输出'No Answer'。
思路
有一个定理:N个点用N-1条边连接成一个连通块,形成的图形只可能是树,没有别的可能。
那么有如下的关系:
所以我们如果想要连出k棵树,就需要连n-k条边。
题目要求用n朵云连出k个棉花糖。因为每个棉花糖都是连通的,那么每个棉花糖就相当于是一棵树。
就是说要用n个节点连出k棵树。即要用n-k条边连出k棵树。
也就是说要花费连出n-k条边的代价。
既然一定要花费连出n-k条边的代价,那么当然要选择代价最小的边连起来。
所以给每条可以连的边按代价从小到大排个序,然后连n-k条边造k个最小生成树就可以了。
(思路是偷的,代码自己打的,逃!)
代码
#include<iostream> #include<string> #include<stack> #include<queue> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std;int n,m,k; int sum=0,ans=0; int pre[1001];struct bian {int u,v,w; } b[10001];bool comp(bian a,bian b){return a.w<b.w; } int find(int x) {if(pre[x]==x)return x;return pre[x]=find(pre[x]); }int main() {scanf("%d%d%d",&n,&m,&k);for(int i=1; i<=n; i++) pre[i]=i;for(int i=1; i<=m; i++) {scanf("%d%d%d",&b[i].u,&b[i].v,&b[i].w);}stable_sort(b+1,b+m+1,comp);for(int i=1; i<=m; i++) {int fx=find(b[i].u),fy=find(b[i].v);if(fx!=fy) {pre[fx]=fy;sum++;ans+=b[i].w;}if(sum==n-k) {cout<<ans;return 0;}}printf("No Answer");return 0; }
转载于:https://www.cnblogs.com/loceaner/p/10695881.html
洛谷 P1195 口袋的天空相关推荐
- 洛谷 P1195 口袋的天空 (题解+代码)
题目传送门:https://www.luogu.com.cn/problem/P1195 题解: 由于需要有k个棉花糖,则可理解为将云朵分成k个部分. 特判棉花糖大于云朵的数量,此时无解. 那么对于一 ...
- 洛谷 1195 口袋的天空 最小生成树 解题报告
题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在 ...
- 洛谷 1195 口袋的天空
传送门 并查集水题. //Twenty #include<algorithm> #include<iostream> #include<cstdlib> #incl ...
- P1111 修复公路P1195 口袋的天空
目录 P1111 修复公路 P1195 口袋的天空 P1111 修复公路 题目链接:https://www.luogu.com.cn/problem/P1111 标签:并查集,最小生成树 思路:本题用 ...
- 【P1195 口袋的天空】
P1195 口袋的天空 口袋的天空 题目背景 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 题意及分析 放代码 口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗 ...
- P1195 口袋的天空-Kruskal(优先队列+并查集)
口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数 N N N,再给你 M M ...
- 【洛谷】P1195 口袋的天空
明显看出为最小生成树, 那么:难点在哪里呢? if(cnt==n-k)//******{flag=1;break;} 为什么是cnt==n-k呢而不是k呢?!!! 解释:(如果每个已经连在一起了就不能 ...
- P1195 口袋的天空【并查集】
题目链接 参考题解 有一句话说的是 如果n个点被n-1条边连接的话,这一定是棵树. 那么: 连的边数 得到的树的个数 n-1 1 n-2 2 n-3 3 - - n-k k 所以我们如果想要连出k棵树 ...
- 最小生成树——洛谷并查集、口袋的天空
最小生成树--并查集 简单模板题-洛谷3367并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入格式 第一行包含两个整数 N,MN,M ,表示共有 NN 个元素和 MM 个操作 ...
- 洛谷 深基 第1部分 语言入门 第4章 循环结构程序设计(2022.02.14)
P5718 [深基4.例2]找最小值 [深基4.例2]找最小值 - 洛谷 P5718 [深基4.例2]找最小值(python3实现)-2022.02.01 P5718 [深基4.例2]找最小值(pyt ...
最新文章
- 监听者模式理解(Swing)
- Bengio和LeCun成为2020年AAAI Fellow,今年无华人学者入选
- 模拟电路技术之基础知识(六)
- Webservice接口、Webservice例子
- Exception in thread main java.lang.Error: Unresolved compilation problems 解决方案
- Nmap系列C------OSI二层扫描
- exchange 2010申请分配证书服务提示:证书无效,不可用于exchange server
- eclipse断点Source not found解决方案1,2,3
- 【JS基础】异步和单线程
- Flink-keySet方法
- [转载] Python模块
- 网页设计中常用的HTML代码
- SQL经典练习题及答案
- 模拟科目二侧方位停车训练
- 计算机原理 · 全加器
- 【luogu3403】跳楼机 [同余最短路]
- redis设计秒杀活动图解
- 训练CV模型新思路来了:用NLP大火的Prompt替代微调,性能全面提升
- 【杂谈与乱码】我们过度解读了鲁迅先生了么?
- PDF - 使用 Adobe Acrobat 压缩 PDF 大小
热门文章
- javaweb学习(5)--Cookie
- Delphi2010启动报错cannot create file C:Users\ADMINI~1\AppDat...\EditorLineEnds.ttr
- 逻辑强化(03)真假推理 知识练习
- python识别颜色并提取轮廓_用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积...
- javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试准确率79.7%以上)
- 旋转(Rotation)矩阵转欧拉角(euler)
- 计算机超链接文档顶端,电脑在Word文档里插入目录超链接的方法
- 看不见的大猩猩--读书笔记
- Android源码解析之Android系统启动整体流程分析
- vue脚手架 使用npm run dev 遇到的错误问题