博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1195 口袋的天空
阅读量:5117 次
发布时间:2019-06-13

本文共 1176 字,大约阅读时间需要 3 分钟。

洛谷 P1195 口袋的天空

Description

  • 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在一起。

    现在小杉要把所有云朵连成K个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。

Input

  • 第一行有三个数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)

Output

  • 对每组数据输出一行,仅有一个整数,表示最小的代价。

    如果怎么连都连不出K个棉花糖,请输出'No Answer'。

Sample Input

3 1 2

1 2 1

Sample Output

1

题解:

  • 一道裸奔的最小生成树居然是绿题!?
  • 这题考语文,要k个棉花糖其实就是k个点联通的最小代价
#include 
#include
#include
#define N 10005using namespace std;struct E {int u, v, w;} e[N];int n, m, k, num, cnt, ans;int h[N], fat[N];bool cmp(E x, E y) { return x.w < y.w;}int getFat(int x){ if(x == fat[x]) return x; else return fat[x] = getFat(fat[x]);}void minTree(){ for(int i = 1; i <= n; i++) fat[i] = i; sort(e + 1, e + 1 + m, cmp); for(int i = 1; i <= m; i++) { if(getFat(e[i].u) != getFat(e[i].v)) fat[getFat(e[i].u)] = getFat(e[i].v), cnt++, ans += e[i].w; if(cnt == n - k) break; }}int main(){ cin >> n >> m >> k; for(int i = 1; i <= m; i++) cin >> e[i].u >> e[i].v >> e[i].w; minTree(); cout << ans; return 0;}

转载于:https://www.cnblogs.com/BigYellowDog/p/11219688.html

你可能感兴趣的文章
GIT在Linux上的安装和使用简介
查看>>
基于C#编程语言的Mysql常用操作
查看>>
s3c2440实验---定时器
查看>>
MyEclipse10安装SVN插件
查看>>
[转]: 视图和表的区别和联系
查看>>
Regular Experssion
查看>>
图论例题1——NOIP2015信息传递
查看>>
uCOS-II中的任务切换-图解多种任务调度时机与问题
查看>>
CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
UseIIS
查看>>
集合体系
查看>>
vi命令提示:Terminal too wide
查看>>
引用 移植Linux到s3c2410上
查看>>
MySQL5.7开多实例指导
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>
poj1201 查分约束系统
查看>>
Red and Black(poj-1979)
查看>>
分布式锁的思路以及实现分析
查看>>