口袋的天空

题目背景

小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。

有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。

题目描述

给你云朵的个数 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(优先队列+并查集)相关推荐

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

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

  2. 【P1195 口袋的天空】

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

  3. UVA10034 Freckles【Kruskal算法+并查集】

    In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...

  4. HDU1233 还是畅通工程【Kruskal算法+并查集】

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  5. HDU1863 畅通工程【Kruskal算法+并查集】

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. 最小生成树kruskal算法并查集版 C语言实现

    今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...

  7. hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1233 模板题,kruskal求最小生成树. 并查集是个好东西啊  就是注意一点 输入边的信息时,角标 ...

  8. HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...

  9. HDU1875 畅通工程再续【Kruskal算法+并查集】

    畅通工程再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

最新文章

  1. 在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' 出错问题的解决方法
  2. 一打在2019年亮相的迷人科技项目:飞行汽车、子弹头列车、登月、……
  3. Java 集合 之 Vector
  4. matlab数学建模可应用到第几章,《MATLAB在数学建模中的应用(第2版)》
  5. 疟疾检测-Keras深度学习医学图像分析
  6. windows 读写锁 python_用Python实现读写锁的示例代码
  7. 黑马程序员——java基础---IO(input output)流字符流
  8. linux主备dns切换时间,linux下主从DNS配置相关知识(二)
  9. C++--第8课 - 类中的封装
  10. 以前做过一个光标代码的梦,貌似也是个预言梦
  11. [2018.08.09 T3] 几何题
  12. 会议论文有影响因子吗_会议论文和期刊论文的区别
  13. 六足机器人步态与动力学仿真
  14. Pubwin数据备份专家官方版
  15. linux中的帮助命令man,help
  16. Pycharm Professional Edition 激活码(license),有效期至2018年10月14日
  17. php mail 垃圾邮件,如何避免我的邮件从PHP邮件()被标记为垃圾邮件? - 程序园
  18. 管理者的角色修炼-第一课总结
  19. 网站SEO优化注意点
  20. Oracle spm

热门文章

  1. 我,27岁,渣本理科男,目前考虑转行python,但又不知道该从何学起......
  2. win2003 iis配置php5.5
  3. 【python 文本翻译】python文本翻译功能
  4. 送书|Python采集QQ音乐热歌榜首数据
  5. 从CSDN的高校俱乐部看过去
  6. html中如何引用其外部字体,css引入外部字体
  7. A ResourcePool could not acquire a resource from its primary factory or source异常解决
  8. 「GitLab CI/CD」- You are not allowed to download code from this project @20210402
  9. 云桌面与云盘如何集成?用什么方案集成?
  10. 基于NEO4J图模型的关系计算