!HDU 4313 破坏导弹攻城计划-连通图-(最小生成树变形)

题意:有n个城市,城市之间有n-1条路连接每个城市,也就是说有一个树,敌人在一些城市放了导弹,共有m个导弹,敌人想把导弹运到一起然后开战,现在给你个任务就是摧毁一些路,使任何两个导弹都不能运到一起,摧毁每条路都有相应的代价,求最小的代价。

分析:

导弹不能运到一起就是说任何两个导弹不能在一个连通图中,所以我们的任务就是用最少的代价摧毁一些路使m个导弹分别在m个连通图中。

这题是就反面,最少的代价,那么就是剩下的路的代价越大越好,这就是最大生成树,所以解题方法是:用Kruskal算法求最大生成树,用并查集来维护两个导弹不能在一个连通图中。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int fa[100005],n,m,t;
struct node{
	int x,y;
	long long v;
}edge[100005];
int k[100005];
long long sum;
bool cmp(node a,node b)
{
	return a.v>b.v;
}
int find(int x)
{
	if(fa[x]==x) return x;
	else return fa[x]=find(fa[x]);
}
void merge(int x,int y)
{
	fa[find(x)]=find(y);
}
void kruskal()
{
	for(int i=0;i<n-1;i++){
		int fax=find(edge[i].x);
		int fay=find(edge[i].y);
		if(k[fax]&&k[fay]){
			sum+=edge[i].v;
			continue;
		}
		else{
			if(k[fax]||k[fay]) k[fax]=k[fay]=1;
			merge(fax,fay);
		}
	}
}
int main()
{
	cin>>t;
	while(t--){
		memset(k,0,sizeof(k));
		cin>>n>>m;
		for(int i=0;i<n;i++) fa[i]=i;
		for(int i=0;i<n-1;i++) cin>>edge[i].x>>edge[i].y>>edge[i].v;
		int tmp;
		for(int i=0;i<m;i++){
			cin>>tmp;
			k[tmp]=1;
		}
		sort(edge,edge+n-1,cmp);
		sum=0;
		kruskal();
		cout<<sum<<endl;
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 08:35:55

!HDU 4313 破坏导弹攻城计划-连通图-(最小生成树变形)的相关文章

一个在校java攻城师的学习计划

首先自我介绍一下,我是来自杭州的一名普通的计算机本科生,今年大三.近期呢,由于机缘巧合被一家公司收留,成为一名苦逼攻城师实习生.真的苦逼啊!以前上学的时候,多少幸福啊,现在每天7点多到晚上8点才能回到寝室.废话不多说了,啪啪啪地有点说远了.写这篇博客是想列一下接下来准备深入研究下的一些技术. 1.java设计模式(我靠,我以前在没学之前感觉好牛逼啊,设计模式一听就是大牛要接触到的东西,奈何现在实习面试中也经常看到这样一条要求:熟悉各种设计模式!) 2.j2ee(我想深入研究一下servlet,之

十八届五中全会:实施国家大数据战略,攻城狮们,你做好准备了吗

2015年10月29日,中共中央十八届五中全会顺利闭幕.会议通过了“十三五”计划并出台了一系列重大政策.“互联网+”与“大数据”也被写入了会议公报.大数据战略被升为国家高度!攻城狮们,赶紧准备啊! 现在正是学习大数据的绝佳机遇,让我们跟随王家林老师,一起学习大数据吧,实现年薪50万的梦想! 王家林老师的第一个中国梦:免费为全社会培养100万名优秀的大数据从业人员! 您可以通过王家林老师的微信号18610086859发红包捐助大数据.互联网+.O2O.工业4.0.微营销.移动互联网等系列免费实战课

汉澳师攻城

在我写完了<汉澳军事指挥作战系统>,<近海歼敌工程计划>,<智能武器系统设计>,以及补充近海歼敌的<对日作战>,我觉得不想再写了,但是最近出现了一件事情让我觉得很可惜,需要补充完善军事理论.那就是伊拉克北部ISIS极端组织一次就枪杀了1700俘虏,制造了人道主义灾难.汉澳军事指挥作战系统里面写到,俘虏不能被我所用就被消灭.其实对待俘虏还有更好的办法,比如关押,释放,迁往控制区转化等.不过对人数很少的ISIS组织来说,大量的俘虏可能难以应对. 根据汉澳军事指挥

无现金革命走向台前,上半场攻城,下半场攻心?

二维码支付的大热正在带动移动支付迅速增长.根据iResearch艾瑞咨询统计数据显示,2017Q1中国第三方移动支付交易规模达到22.7万亿元,环比增速22.9%.在"无现金社会"的耳濡目染下,大到超市商场,小到街边摊贩,越来越多的交易场景正在被二维码支付所占领.不带现金已经成为不少人出门的常态,也就是说,现金的魅力正在逐渐消失,二维码的魅力却大大提升.长此以往,现金将退居幕后,电子货币将成为新主角. 一场由幕后走向台前的"无现金革命" 电子支付同样风生水起,6月8

十年北漂,一个软件“攻城狮”到职业养鸡人的心路历程

本人(武建亮)IT屌丝出生, 2005年到北京,2006年开始正式成为程序员,曾任某公司的技术总监. 2011年开始创业,曾做过电子商务网站.礼品网.智慧旅游相关的创业项目. 2014年底,再一次创业失败,背负40w的外债,放弃一切,远离IT圈. 微信扫一扫 今年是我来北京的第10个年头,人生有几个十年,我年轻时候最美好的时光,都给了这个绚丽的闪耀着金光的城市,但是,金光是他们的,而我什么也没有,今年,我离开北京,跟来时一样,孑然一身. 2005年,我考上了北京的一所学校,带着对这座城市的幻想,

β版本展示博客-第二组(攻城喵组)

一.前情回顾 ①团队介绍:超简洁版→[攻城喵]攻城喵队正式上线!   略详尽版→[攻城喵]α版展示-成员简介 ②选题: 新版瀚海星云BBS→[攻城喵]头脑风暴-选题组会 ③需求分析:初步调查→[攻城喵]校内问卷调查 详尽分析→[攻城喵]α版展示-需求分析及亮点介绍 ④技术和架构分析:    →[攻城喵]技术与架构分析 ⑤任务规划和执行情况:→[攻城喵]任务规划和执行情况 ⑥组会blog:详见目录→[攻城喵]博客汇总目录 ⑦α版展示及总结:     →[攻城喵]α版展示 二.β段冲刺 ①β版需求分

【云栖大会】程序猿、攻城狮的大聚会 他们眼中的云栖大会是啥样

2016年云栖大会进行得如火如荼,"烧脑"."前沿"."高端"."技术"."一票难求"--这些关键词把这场"干货"分享大会衬托得神秘满满,有一群人却沉浸其中,自得其乐. 他们的名字叫--程序猿.攻城狮. 从最初的站长大会,到阿里云开发者大会,再到云栖大会:从200名草根站长到4万名业内外参与者:从单一峰会发展至超过100场论坛的"巨无霸"大会:从纯谈技术到融合音乐节.

HDU 4313 Matrix(贪心+并查集)

HDU 4313 题意: 有n个节点,n-1条边,其中k个节点为危险节点,有大规模杀伤性武器,切断哪些路能使得这些大规模杀伤性武器的危险节点之间彼此不连通,且切断的边权值之和最小. 思路: 初始化每个节点为一个集合,并记录每个集合中危险节点的数目(0或1). 要实现权值之和尽可能的小,则要权值尽可能小,故先将n-1条边按权值先升序排序. 排序后枚举这些边: 若边的两端节点所在集合均有大规模杀伤性武器,则删除它并累计其权值. 若只有一边有,则合并这两个集合(用并查集),合并时尽可能将危险节点置于父

攻城狮在路上(叁)Linux(三十)--- 光盘写入工具

一.基本步骤: 1.用mkisofs命令将所需备份的数据构建成镜像文件. 2.用cdrecord命令将镜像文件刻录至光盘或者DVD中. 二.mkisofs:新建镜像文件 mkisofs [-0 镜像文件] [-rv] [-m file] 待备份文件... [-V vol] graft -point isodir=Systemdir... 参数说明: -o:后面指定镜像文件 -r:通过RockRidge产生支持UNIX/Linux的文件数据,可以记录较多信息. -v:显示构建过程 -m file: