问题 H: 口袋的天空(Kruscal)
题目描述
小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。
有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。
给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在一起。
现在小杉要把一些云朵连在一起,做成K个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。
输入
每组测试数据的 第一行有三个数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
输出
对每组数据输出一行,仅有一个整数,表示最小的代价。 如果怎么连都连不出K个棉花糖,请输出'No Answer'。
样例输入复制
3 1 2 1 2 1
样例输出复制
1
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
const int maxn = 10005;struct Edge
{int x, y, w;bool operator < (const Edge &e) const{return w < e.w;}
}edge[maxn];int F[maxn];
int num=0,ans=0;
int Find(int x)
{//查找x的父节点if (F[x] == x)return x;else return F[x] = Find(F[x]);//递归查找,路径压缩
}int Union(int x, int y,int z)
{int dx = Find(F[x]);int dy = Find(F[y]);if (dx != dy){F[dx] = dy;num++;ans+=z;}return num;
}int main()
{int N, M, K;while(cin >> N >> M >> K){ans=0,num=0;memset(F, 0, sizeof(F));for (int i = 1; i <= N; i++)F[i] = i;for (int i = 1;i <= M; i++)cin>>edge[i].x>>edge[i].y>>edge[i].w;sort(edge + 1, edge + M + 1);bool flag = false;for (int i = 1; i <= M; i++){if(N- Union(edge[i].x,edge[i].y,edge[i].w)==K){flag = true;break;}}if(flag)cout<<ans<<endl;else cout<<"No Answer"<<endl;}return 0;
}
问题 H: 口袋的天空(Kruscal)相关推荐
- 最小生成树——洛谷并查集、口袋的天空
最小生成树--并查集 简单模板题-洛谷3367并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入格式 第一行包含两个整数 N,MN,M ,表示共有 NN 个元素和 MM 个操作 ...
- P1195 口袋的天空-Kruskal(优先队列+并查集)
口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数 N N N,再给你 M M ...
- 【P1195 口袋的天空】
P1195 口袋的天空 口袋的天空 题目背景 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 题意及分析 放代码 口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗 ...
- 【c++图论】【口袋的天空】【部落划分】
目标: 今天的两道题做法和思路有相同之处,合并在一起学习可以帮助更快的掌握图论中克鲁斯卡尔算法的要点和据具体实现步骤,下面来看看题目: 第一题[口袋的天空] 题目如下 题目背景 小杉坐在教室里,透过口 ...
- 张韶涵《口袋的天空》小提琴谱片段
很喜欢张韶涵<口袋的天空>这首歌,每次听感觉都很好.中间有一段小提琴的乐曲,听着特别感人. 找了很久的<口袋的天空>的小提琴谱,一直没有找到,终于有一次找到了这段小提琴谱,2分 ...
- P1111 修复公路P1195 口袋的天空
目录 P1111 修复公路 P1195 口袋的天空 P1111 修复公路 题目链接:https://www.luogu.com.cn/problem/P1111 标签:并查集,最小生成树 思路:本题用 ...
- VIJOS【1234】口袋的天空
背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在一起. ...
- Vijos1234 口袋的天空 题解
博客园同步 原题链接 简要题意: 求把一个图分成 k k k 个连通块并连接连通块的最小价值. 一种类似于 prim \texttt{prim} prim 贪心的做法. 即用 并查集 维护当前节点所属 ...
- P1195 口袋的天空【并查集】
题目链接 参考题解 有一句话说的是 如果n个点被n-1条边连接的话,这一定是棵树. 那么: 连的边数 得到的树的个数 n-1 1 n-2 2 n-3 3 - - n-k k 所以我们如果想要连出k棵树 ...
最新文章
- 厉害了,Spring Cloud Alibaba 发布 GA 版本!
- boost::hana::make_tuple用法的测试程序
- Sublime Text 的下载巨慢的问题,安装问题,html页面代码生成问题,代码提示问题 全都解决了【最完美的解决方案】
- 悬剑武器库之5种工具学习(shiro检测插件、子域名、信息收集、暴力破解等)
- java编程思想 学习笔记(2)
- Java Attach API
- Eclipse中的Github Gists
- python映射的主要特点_30 个 Python 语言的特点技巧
- mybatis 之动态SQL
- 世界robocode机器人的四大运动方式分析
- java如何动态添加数组数据_Java动态数组添加数据的方法与应用示例
- abaqus python提取楼层剪力_用Python提取ABAQUS中节点集合的反力
- 谷歌翻译不能用,解决方案
- 第一章 Cheat Enginee(CE)使用指南
- 浏览器加载网页资源的原理
- leetcode总结无止境系列之链表
- 第三讲:如何构建双活数据中心方案
- 2021年全球天然橡胶行业供需现状分析:需求量迎来恢复性增长,中国市场需求量占比超40%[图]
- GDB内存断点(Memory break)的使用举例
- C++のeasyx3:函数clearcliprgn、cleardevice、closegraph、getaspectratio、graphdefaults的运用
热门文章
- 三种IP核总线接口比较分析
- C305例会-电脑攒机
- Win10下安装必应输入法能导致Alt+Tab切换页面时不能置于最前
- java main 方法使用 HttpClients发送请求 不打印debug日志
- 中专毕业生计算机简历模板,中专生简历模板
- [精]Oracle VPD详解(虚拟专用数据库)
- 局域网语音对讲系统_IP广播对讲系统停车场解决方案
- 参考 2.4.20 2.6.X
- vs code + mingw64配置C语言环境
- 判断一个人能否胜任团队leader,就看这一点,转载