【题目背景:】

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

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

【题目描述:】

给你云朵的个数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. [日常] Go语言圣经--并发的循环习题

    练习 8.4: 修改reverb2服务器,在每一个连接中使用sync.WaitGroup来计数活跃的echo goroutine.当计数减为零时,关闭TCP连接的写入,像练习8.3中一样.验证一下你的 ...

  2. 【ibatis】IBatis返回map类型数据

    有时侯不想创建javabean,或者污染现有的javaBean对象,就需要返回Map类型的数据对象: 1)最简单的方法就是将查询到的字段,使用""进行引起来,这样就可以返回map类 ...

  3. 【Java并发编程】7、线程池

    1. 为什么使用线程池 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协 ...

  4. SpringBoot —— AOP注解式拦截与方法规则拦截

    AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. SpringBoot中AOP的使用 ...

  5. 怎么配置wamp下mysql的编码

    Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高 ...

  6. JavaScript修改日期格式

    <script> //封装时间格式 function format(time, format) { var t = new Date(time); var tf = function (i ...

  7. 【Python】定时调度

    from datetime import datetime from apscheduler.schedulers.blocking import BlockingScheduler def tick ...

  8. Azure 实例元数据服务

    Azure 实例元数据服务提供有关可用于管理和配置虚拟机的正在运行的虚拟机实例的信息. 这包括 SKU.网络配置和即将发生的维护事件等信息. 若要详细了解可用信息类型,请参阅元数据类别. Azure ...

  9. sqlserver tablediff 实用工具

    tablediff 是sqlserver自带的实用工具 sqlserver 2012 在110目录下,sqlserver2008在100目录下 官方参考文档如下: https://docs.micro ...

  10. quarz时间配置

    Cron表达式的格式:秒 分 时 日 月 周 年(可选). 字段名                 允许的值                            允许的特殊字符     秒     ...