【题目背景:】

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

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

【题目描述:】

给你云朵的个数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'。





[算法分析:]

一看就是最小生成树,关键在于怎样“连成K个棉花糖”花费的代价最小.

由于一朵云就可以是一个棉花糖,所以那些连边代价大的云朵就不要连,

也就是说有\((k-1)\)朵云不要去管他们,剩下的\((n-k+1)\)朵云连成一个棉花糖,总共使用了\(n\)朵云连成了\(k\)个棉花糖.

使用Kruskal做MST,连\((n-k)\)条边就好.





[Code:]

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std; const int MAXN = 1000 + 1;
const int MAXM = 10000 + 1; int n, m, k;
int fa[MAXN]; struct Edge {
int x, y, l;
}h[MAXM]; inline bool cmp(Edge a, Edge b) {
return a.l < b.l;
} int find(int x) {
if(fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
} int main() {
scanf("%d%d%d", &n, &m, &k);
for(int i=1; i<=n; ++i) fa[i] = i;
for(int i=1; i<=m; ++i)
scanf("%d%d%d", &h[i].x, &h[i].y, &h[i].l);
sort(h + 1, h + m + 1, cmp);
int tot = 0, num = 0;
for(int i=1; i<=m; ++i) {
int fx = find(h[i].x), fy = find(h[i].y);
if(fx != fy) {
fa[fx] = fy;
tot += h[i].l;
++num;
}
if(num == n-k) break;
}
if(num < n-k) puts("No Answer");
else printf("%d\n", tot);
}

【洛谷】【最小生成树】P1195 口袋的天空的更多相关文章

  1. 题解【洛谷P1995】口袋的天空

    题面 题解 从图中删边,直到图中只剩\(k\)条边,计算权值之和即可. 代码 #include <iostream> #include <cstdio> #include &l ...

  2. P1195 口袋的天空

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

  3. 洛谷P1195 口袋的天空

    口袋的天空 327通过 749提交 题目提供者该用户不存在 标签云端 难度普及+/提高 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 暂时没有讨论 题目背景 小杉坐在教室里,透 ...

  4. 洛谷 P1195 口袋的天空(最小生成树)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P1195 思路: 首先可以判断这道题是用最小生成树来做的,然后在将其合并时用ans记录一下它的总消耗, ...

  5. 洛谷 P1195 口袋的天空

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

  6. 洛谷P1195口袋的天空

    传送门啦 一个裸的最小生成树,输出 $ No Answer $ 的情况只有 $ k < n $ 的时候. 开始令 $ num =n $ ,如果 $ num = k $ ,直接输出 $ 0 $ , ...

  7. P1195 口袋的天空 洛谷

    https://www.luogu.org/problem/show?pid=1195 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美 ...

  8. 【luogu P1195 口袋的天空】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1195 嗯~我是被题目背景吸引到才做的,想吃棉花糖啦! 话说回来,这道题其实很容易就能想明白,k棵最小生成树. ...

  9. luogu P1195 口袋的天空

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

随机推荐

  1. C#常见几道面试题

    首先碰到的是这样的一首题目:计算数组{1,1,2,3,5,8.......} 第30位值,不用递归,我写出了以下这样的代码: static void Main(string[] args) { ]; ...

  2. jQuery自定义数组操作类(类似于List集合的增删改查)

    js外部文件,前提需要引入jquery类库. 封装类代码如下: (function ($) {     $.List = function () {         var _list = new A ...

  3. VMware设置桥接上网

    转自:http://blog.csdn.net/gavin_dinggengjia/article/details/6325904 环境:主机Win7.VMware Workstation 6.5.3 ...

  4. 消息推送SignalR简单实例

    消息推送SignalR:一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信. 功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请 ...

  5. Java 并发:Future FutureTask

    Future 当向一个ExecutorService提交任务后可以获得一个Future对象,在该对象上可以调用get,cancel等命令来获取任务运行值或者是取消任务.下面是一个简单的计数任务: pu ...

  6. Code Signal_练习题_stringsRearrangement

    Given an array of equal-length strings, check if it is possible to rearrange the strings in such a w ...

  7. JS写的二级导航栏(利用冒泡原理)

    今天给大家分享一种用JS写的导航栏,虽然我们工作中不会使用JS来做导航栏,为了练习我们用JS来做一个JS导航栏 这种方法要比其他方法代码量少很多,但是需要对事件冒泡有一定的理解,如果需要理解冒泡可以参 ...

  8. windows环境下IP多访问

    1.E:\wamp64\bin\apache\apache2.4.23\conf\extra\httpd-vhosts.conf 添加: <VirtualHost *:80> Server ...

  9. JSON.parse()与JSON.stringify()高级用法

    JSON.parse()与JSON.stringify是将JSON对象与字符串互相转换的方法,它们还有一些参数可以让我们在实际应用中更加方便,现在介绍一下它们的高级用法 JSON.parse() JS ...

  10. <Android 基础(三十二)> ViewFlipper

    简介 View Flipper,是ViewAnimator的子类,而ViewAnimator又是继承自FrameLayout,而FrameLayout就是平时基本上只显示一个子视图的布局,由于Fram ...