题目链接

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 口袋的天空相关推荐

  1. 洛谷 P1195 口袋的天空 (题解+代码)

    题目传送门:https://www.luogu.com.cn/problem/P1195 题解: 由于需要有k个棉花糖,则可理解为将云朵分成k个部分. 特判棉花糖大于云朵的数量,此时无解. 那么对于一 ...

  2. 洛谷 1195 口袋的天空 最小生成树 解题报告

    题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在 ...

  3. 洛谷 1195 口袋的天空

    传送门 并查集水题. //Twenty #include<algorithm> #include<iostream> #include<cstdlib> #incl ...

  4. P1111 修复公路P1195 口袋的天空

    目录 P1111 修复公路 P1195 口袋的天空 P1111 修复公路 题目链接:https://www.luogu.com.cn/problem/P1111 标签:并查集,最小生成树 思路:本题用 ...

  5. 【P1195 口袋的天空】

    P1195 口袋的天空 口袋的天空 题目背景 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 题意及分析 放代码 口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗 ...

  6. P1195 口袋的天空-Kruskal(优先队列+并查集)

    口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数 N N N,再给你 M M ...

  7. 【洛谷】P1195 口袋的天空

    明显看出为最小生成树, 那么:难点在哪里呢? if(cnt==n-k)//******{flag=1;break;} 为什么是cnt==n-k呢而不是k呢?!!! 解释:(如果每个已经连在一起了就不能 ...

  8. P1195 口袋的天空【并查集】

    题目链接 参考题解 有一句话说的是 如果n个点被n-1条边连接的话,这一定是棵树. 那么: 连的边数 得到的树的个数 n-1 1 n-2 2 n-3 3 - - n-k k 所以我们如果想要连出k棵树 ...

  9. 最小生成树——洛谷并查集、口袋的天空

    最小生成树--并查集 简单模板题-洛谷3367并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入格式 第一行包含两个整数 N,MN,M ,表示共有 NN 个元素和 MM 个操作 ...

  10. 洛谷 深基 第1部分 语言入门 第4章 循环结构程序设计(2022.02.14)

    P5718 [深基4.例2]找最小值 [深基4.例2]找最小值 - 洛谷 P5718 [深基4.例2]找最小值(python3实现)-2022.02.01 P5718 [深基4.例2]找最小值(pyt ...

最新文章

  1. 监听者模式理解(Swing)
  2. Bengio和LeCun成为2020年AAAI Fellow,今年无华人学者入选
  3. 模拟电路技术之基础知识(六)
  4. Webservice接口、Webservice例子
  5. Exception in thread main java.lang.Error: Unresolved compilation problems 解决方案
  6. Nmap系列C------OSI二层扫描
  7. exchange 2010申请分配证书服务提示:证书无效,不可用于exchange server
  8. eclipse断点Source not found解决方案1,2,3
  9. 【JS基础】异步和单线程
  10. Flink-keySet方法
  11. [转载] Python模块
  12. 网页设计中常用的HTML代码
  13. SQL经典练习题及答案
  14. 模拟科目二侧方位停车训练
  15. 计算机原理 · 全加器
  16. 【luogu3403】跳楼机 [同余最短路]
  17. redis设计秒杀活动图解
  18. 训练CV模型新思路来了:用NLP大火的Prompt替代微调,性能全面提升
  19. 【杂谈与乱码】我们过度解读了鲁迅先生了么?
  20. PDF - 使用 Adobe Acrobat 压缩 PDF 大小

热门文章

  1. javaweb学习(5)--Cookie
  2. Delphi2010启动报错cannot create file C:Users\ADMINI~1\AppDat...\EditorLineEnds.ttr
  3. 逻辑强化(03)真假推理 知识练习
  4. python识别颜色并提取轮廓_用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积...
  5. javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试准确率79.7%以上)
  6. 旋转(Rotation)矩阵转欧拉角(euler)
  7. 计算机超链接文档顶端,电脑在Word文档里插入目录超链接的方法
  8. 看不见的大猩猩--读书笔记
  9. Android源码解析之Android系统启动整体流程分析
  10. vue脚手架 使用npm run dev 遇到的错误问题