【最小生成树】口袋的天空

摘要:
小山坐在教室里,透过口袋般的窗户望着口袋般的天空。那里飘着许多云。它看起来很漂亮。小山想摘下那些美丽的云彩,做棉花糖。为您描述云的数量N,然后给您M个关系,以指示哪些云可以连接在一起。现在小山想把一些云连在一起做成K棉花糖。一个棉花糖至少需要一片云彩。小山想知道如何以最低的成本连接它们。格式输入格式每组测试数据的第一行有三个数字N、M、K(1<=N<=1000,1&

口袋的天空

背景

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

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

描述

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

样例1

样例输入1

3 1 2
1 2 1

样例输出1

1
限制

每个测试点1s

提示

样例2:
Input:
3 1 1
1 2 1

Output:
No Answer

来源

lolanv

试题分析

    最小生成树模板题,直接将最后一个棉花糖连成最小生成树,剩下K-1个用单个的云朵来当棉花糖就好了

代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
inline int read(){
	int x=0,f=1;char c=getchar();
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) x=x*10+c-'0';
	return x*f;
}
const int INF = 9999999;
struct data{
	int x,y,v;
}e[1000001];
bool cmp(data a,data b){
	return a.v<b.v;
}
int fa[100001];
int find(int x){
	if(x!=fa[x]) return fa[x]=find(fa[x]);
	return x;
}
int N,M,K; int ans;
int main(){
	N=read(),M=read(),K=read();
	for(int i=1;i<=M;i++){
	    e[i].x=read(),e[i].y=read();
	    e[i].v=read();
	}
	sort(e+1,e+M+1,cmp); int cnt=N;
	for(int i=1;i<=N;i++) fa[i]=i;
	for(int i=1;i<=M&&cnt>K;i++){
		int u=find(e[i].x),v=find(e[i].y);
		if(u!=v){
			ans+=e[i].v;
			cnt--;fa[v]=u;
		}
	}
	printf("%d
",ans);
	return 0;
}

  

免责声明:文章转载自《【最小生成树】口袋的天空》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ASP.NET探针微信小程序实现国旗头像,国庆个性化头像。国庆头像下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转载]最小生成树-Prim算法和Kruskal算法

转载地址:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html  自己在学,感觉这个讲的很不错,就转载了。 Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点...

poj2349最小生成树prim算法

题目:有s个satellite channels,但有p(p>s)个地方,若任意两个地方有satellite channels,则无视该距离,并且剩余的地方只能与其他地方通过无线电连接,需要距离,且需要的距离只与最大距离有关,问该最大距离的最小值(大概是这样啦)分析:实际上就是求最小生成树中的第p-s大的数,可以先通过prim算法生成最小生成树,然后...

【洛谷P2504】聪明的猴子 最小瓶颈树

题目大意:给定一张 N 个顶点的完全图,边有边权,求该完全图的一棵最小瓶颈树。 最小瓶颈树:一棵最大边权值在同一张图的所有生成树中最小,即:最大边权值最小的生成树,其值为该树的最大边权的权值。引理1:最小生成树一定是一棵最小瓶颈树。证明:若最小生成树不是最小瓶颈树,则意味着存在一条边的权值大于最小瓶颈树的最大边权值,那么将 MST 的该边去掉,则将一棵树变...

BZOJ2594 [Wc2006]水管局长数据加强版 【LCT维护最小生成树】

题目 SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一条从A至B的水管的路径,接着通过信息化的控制中心通知路径上的水管进入准备送水状态,等到路径上每一条水管都准备好了,供水公司就可以开始送水了。嘟嘟一次只能处理一项送水任务,等到...

bzoj1083 [SCOI2005]繁忙的都市(最小生成树)

Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市C的道 路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连 接。这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了。每条道路都有一个分值,分值越小表示这 个道路越繁忙,越需要进行改造...

Kruskal算法&amp;amp;Prim算法

最小生成树是什么? Kruskal算法 图文转载自a2392008643的博客 此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。 把图中的所有边按代价从小到大排序; 把图中的n个顶点看成独立的n棵树组成的森林; 按权值从小到大选择边,所选的边连接的两个顶点ui,viui,vi,应属于...