P1195 口袋的天空-Kruskal(优先队列+并查集)
口袋的天空
题目背景
小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。
有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。
题目描述
给你云朵的个数 N N N,再给你 M M M 个关系,表示哪些云朵可以连在一起。
现在小杉要把所有云朵连成 K K K 个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。
输入格式
第一行有三个数 N , M , K N,M,K N,M,K。
接下来 M M M 行每行三个数 X , Y , L X,Y,L X,Y,L,表示 X X X 云和 Y Y Y 云可以通过 L L L 的代价连在一起。
输出格式
对每组数据输出一行,仅有一个整数,表示最小的代价。
如果怎么连都连不出 K K K 个棉花糖,请输出 No Answer
。
样例 #1
样例输入 #1
3 1 2
1 2 1
样例输出 #1
1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define de(x) cout<<x<<" ";
#define sf(x) scanf("%d",&x);
#define Pu puts("");
const int N=1e3+10,M=2e5+10;
int f[N];
//int u[N],tot;//原本想先建成最小生成树,然后减去最大的(n-k)条边
//但是后来发现如果数据给的边数不够,无法建成树,则一定求解不出来
//正确思路:每次往最小生成树里加一条边,意味着连通块少1。所以一直加直到为k个连通块
//(即选了最小生成树的前n-k条边)
int cnt;
struct E{int x,y,u;
};
struct cmp{bool operator()(E a,E b){return a.u>b.u;}
};
priority_queue<E,vector<E>,cmp>q;
int n,m,k;
int ans;
int find(int x){if(x==f[x]) return x;return f[x]=find(f[x]);
}
void kruskal(){for(int i=1;i<=n;i++) f[i]=i;int x,y,z;int a,b;while(!q.empty()){x=q.top().x;y=q.top().y;z=q.top().u;q.pop();a=find(x);b=find(y);if(a!=b){if(a>b) f[a]=b;else f[b]=a;//u[++tot]=z;//储存n-1条边权重的数组ans+=z;//总和,即最小生成树cnt--;if(cnt==0) return ;}}
}
int main(){cin>>n>>m>>k;int x,y,z;for(int i=1;i<=m;i++){sf(x)sf(y)sf(z)q.push(E{x,y,z});}cnt=n-k;kruskal();if(cnt) {printf("No Answer\n");return 0;}// sort(u+1,u+tot+1);// int id=tot;// while(k--){// ans-=u[tot--];// }printf("%d\n",ans);return 0;
}
P1195 口袋的天空-Kruskal(优先队列+并查集)相关推荐
- P1111 修复公路P1195 口袋的天空
目录 P1111 修复公路 P1195 口袋的天空 P1111 修复公路 题目链接:https://www.luogu.com.cn/problem/P1111 标签:并查集,最小生成树 思路:本题用 ...
- 【P1195 口袋的天空】
P1195 口袋的天空 口袋的天空 题目背景 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 题意及分析 放代码 口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗 ...
- UVA10034 Freckles【Kruskal算法+并查集】
In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...
- HDU1233 还是畅通工程【Kruskal算法+并查集】
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU1863 畅通工程【Kruskal算法+并查集】
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 最小生成树kruskal算法并查集版 C语言实现
今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1233 模板题,kruskal求最小生成树. 并查集是个好东西啊 就是注意一点 输入边的信息时,角标 ...
- HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...
- HDU1875 畅通工程再续【Kruskal算法+并查集】
畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
最新文章
- 在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' 出错问题的解决方法
- 一打在2019年亮相的迷人科技项目:飞行汽车、子弹头列车、登月、……
- Java 集合 之 Vector
- matlab数学建模可应用到第几章,《MATLAB在数学建模中的应用(第2版)》
- 疟疾检测-Keras深度学习医学图像分析
- windows 读写锁 python_用Python实现读写锁的示例代码
- 黑马程序员——java基础---IO(input output)流字符流
- linux主备dns切换时间,linux下主从DNS配置相关知识(二)
- C++--第8课 - 类中的封装
- 以前做过一个光标代码的梦,貌似也是个预言梦
- [2018.08.09 T3] 几何题
- 会议论文有影响因子吗_会议论文和期刊论文的区别
- 六足机器人步态与动力学仿真
- Pubwin数据备份专家官方版
- linux中的帮助命令man,help
- Pycharm Professional Edition 激活码(license),有效期至2018年10月14日
- php mail 垃圾邮件,如何避免我的邮件从PHP邮件()被标记为垃圾邮件? - 程序园
- 管理者的角色修炼-第一课总结
- 网站SEO优化注意点
- Oracle spm
热门文章
- 我,27岁,渣本理科男,目前考虑转行python,但又不知道该从何学起......
- win2003 iis配置php5.5
- 【python 文本翻译】python文本翻译功能
- 送书|Python采集QQ音乐热歌榜首数据
- 从CSDN的高校俱乐部看过去
- html中如何引用其外部字体,css引入外部字体
- A ResourcePool could not acquire a resource from its primary factory or source异常解决
- 「GitLab CI/CD」- You are not allowed to download code from this project @20210402
- 云桌面与云盘如何集成?用什么方案集成?
- 基于NEO4J图模型的关系计算