洛谷 P1195 口袋的天空
题目背景
小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。
有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。
题目描述
给你云朵的个数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
说明
厦门一中YMS原创
聂老大 又拿出来考了一遍
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,k,tot,MST=,fa[];
#define maxm 10000
struct Edge{
int to,value,from;
bool operator < (const Edge &a ) const{
return value<a.value;
}
}e[maxm*+];
void Add_Edge(int u,int v,int w){
e[++tot].to=v;e[tot].value=w;e[tot].from=u;
}
int Find(int x){
if(x==fa[x])return x;
else return fa[x]=Find(fa[x]);
}
int main()
{ scanf("%d%d%d",&n,&m,&k);
for(int i=,u,v,w;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
Add_Edge(u,v,w);
}
if(n<k){
printf("No Answer\n");
return ;
}
sort(e+,e+tot+);
for(int i=;i<=n+;i++) fa[i]=i;
int cur=;
for(int i=;i;i++){
int v=e[i].to,u=e[i].from;
int rx=Find(u),ry=Find(v);
if(rx!=ry){
cur++;
MST+=e[i].value;
fa[rx]=ry;
}
if(cur == n-k )break;
}
printf("%d",MST);
return ;
}
/*思路 :取 前K条边 连成一棵最小生成树
其余的单独成树
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,k,ans,fa[1111];
struct node{
int from;
int to;
int value;
bool operator <(const node &a)const
{
return value<a.value;
}
}Edge[11111];
int find(int x)
{
if(x==fa[x]) return x;
else return fa[x]=find(fa[x]);
}
int main()
{
cin>>n>>m>>k;
int x,y,l;
for(int i=1;i<=m;i++)
{
cin>>x>>y>>l;
Edge[i].from=x;
Edge[i].to=y;
Edge[i].value=l;
} for(int i=1;i<=n;i++)
fa[i]=i; sort(Edge+1,Edge+m+1); int js=1,h=1;
// js 是当前已用边数
// 此题是个最小生成树问题 需成多棵树
// h 用于记录排好序的边中 用到了第几条
if((k>n)||((n-k)>m))// (n-k)k棵最小生成树 需要的边数 然而只有m条边so~~
{
printf("No Answer\n");
return 0;
}
while(js<=n-k)// 生成一棵树用n-1条边,k棵则需要n-k条边
{ int rx=Edge[h].from;
int ry=Edge[h].to;
int w=Edge[h].value;
int fx=find(rx);int fy=find(ry);
if(fx!=fy)
{
js++;
fa[fx]=fy;
ans+=w;
}
h++;
} printf("%d\n",ans); return 0;
}
思路:见代码中的解释
洛谷 P1195 口袋的天空的更多相关文章
- 洛谷P1195 口袋的天空
口袋的天空 327通过 749提交 题目提供者该用户不存在 标签云端 难度普及+/提高 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 暂时没有讨论 题目背景 小杉坐在教室里,透 ...
- 洛谷 P1195 口袋的天空(最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1195 思路: 首先可以判断这道题是用最小生成树来做的,然后在将其合并时用ans记录一下它的总消耗, ...
- 洛谷P1195口袋的天空
传送门啦 一个裸的最小生成树,输出 $ No Answer $ 的情况只有 $ k < n $ 的时候. 开始令 $ num =n $ ,如果 $ num = k $ ,直接输出 $ 0 $ , ...
- P1195 口袋的天空
P1195 口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关 ...
- 【洛谷】【最小生成树】P1195 口袋的天空
[题目背景:] 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. [题目描述:] 给你云朵的个数N,再给你M个关系,表示哪些 ...
- P1195 口袋的天空 洛谷
https://www.luogu.org/problem/show?pid=1195 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美 ...
- 洛谷 P1195 【口袋的天空】
P1195 传送门 大体题意: 就是给你\(n\)个点\(m\)条边, 然后让你把这几个点连成\(k\)个部分. 解题思路: 很容易就可以想到生成树(别问我怎么想到的). 因为最小生成树中有一个判断 ...
- 【luogu P1195 口袋的天空】 题解
题目链接:https://www.luogu.org/problemnew/show/P1195 嗯~我是被题目背景吸引到才做的,想吃棉花糖啦! 话说回来,这道题其实很容易就能想明白,k棵最小生成树. ...
- luogu P1195 口袋的天空
题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在 ...
随机推荐
- JavaScript针对Dom相关的优化心得
JavaScript针对Dom相关的优化心得 组内同时总结的关于javascript性能优化注意些节.记录一下. 1. 批量增加 Dom 尽量使用修改 innerHTML 的方式而不是用 append ...
- iOS抗锯齿的方式
iOS开发中,有时候展示图片等内容的时候,会出现锯齿.比如笔者最近使用 iCarousel 控件的Cover flow效果来展示几幅图片时,两侧的图片出现了较为严重的锯齿,着实不好看.这里列出两个方式 ...
- 浅谈 qmake 之 pro、pri、prf、prl文件
尽管每次和cmake对比起来,我们总是说 qmake 简单.功能少.但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧: 不是太清楚CONFIG等变量到底如何起作用的 用过的qmake内 ...
- 一款基于jQuery底部带缩略图的焦点图
之前我们已经分享过不少实用的jQuery焦点图插件了,今天我们要介绍的这款jQuery焦点图插件是带有缩略图的,我们只需点击缩略图即可切换至相应的图片,图片切换的时候出现淡入淡出的动画效果. 在线预览 ...
- Java_Hbase优化
1.datanode的最大文件数 vi $HADOOP_HOME/conf/hdfs-site.xml <property> <name>dfs.datanode.max.xc ...
- Apache的编译安装error: APR not found. Please read the documentation
提示configure: error: APR not found. Please read the documentation. 经网上查阅资料才知道这是Apache的关联软件 在apr.apach ...
- CentOS7 安装Docker报错
安装报错: Transaction check error: file /usr/lib/systemd/system/blk-availability.service from install o ...
- Transact-SQL三值逻辑
/*===========================<一>========================== 在SQL中逻辑表达式的值有三种: 1.TRUE 2.FALSE 3.U ...
- C#中的DataSet、string、DataTable、对象转换成Json的实现代码
C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...
- C语言中将字符串转换为数字的方法
C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型.长整型.浮点型等)的数字.以下是用atoi()函数将字符串转换为整数的一个例子: # include <stdio. h># ...