newssoj1004逐个击破attack(排序+并查集)
来源:互联网 发布:docker安装windows 10 编辑:程序博客网 时间:2024/06/05 12:45
题目描述
三大战役的平津战场上,傅作义集团在以北平、天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜。为了就地歼敌不让其逃走,毛泽东制定了先切断敌人东洒两头退路然后再逐个歼灭敌人的战略方针。
秉承伟大军事家的战略思想,作为一个有智慧的军长你,遇到了一个类似的战场局面:
现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的,现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算出花费最少的代价将这K个地方军团互相隔离开,以便第二步逐个击破敌人。
输入
第一行包含两个正整数n和k。
第二行包含k个整数,表示哪个城市别敌军占领。
接下来n-1行,每行包含三个正整数a,b,c,表示从a城市到b城市有一条公路,以及破坏的代价c。
城市的编号从0开始计数。
其中:
2<=n<=100000
2<=k<=n
1<=c<=1000000
输出
包含一个整数,表示最少花费的代价。
样例输入
3 30 1 20 1 11 2 2
样例输出
3
提示
【输入样例2】
5 3
1 2 4
1 0 4
1 3 8
2 1 1
2 4 3
【输出样例2】
4
【思路】这是一棵树,两个敌人分开的最小代价是路径上的代价最小的那条。我们便可以把代价从大到小排序每次加入一条边,若是两个敌人刚好连通,这条便是最小的,加入答案。
<span style="font-size:18px;">#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#define ll long longusing namespace std;const int maxn=100005;struct data{ int u,v,w; bool operator<(const data&b)const{ return(w>b.w); }}e[maxn];ll ans=0;int n,k,fa[maxn],emy[maxn];inline int get(){ char c;while(!isdigit(c=getchar())); int v=c-48;while(isdigit(c=getchar()))v=v*10+c-48; return v;}inline int Find(int x){ if(fa[x]==x)return fa[x]; else return (fa[x]=Find(fa[x]));}int main(){ memset(emy,0,sizeof(emy)); n=get();k=get(); for(int i=1;i<=k;++i){ int x=get(); emy[x]=1; } for(int i=1;i<n;++i){ e[i].u=get(),e[i].v=get(),e[i].w=get(); fa[i]=i; } fa[n]=n; sort(e+1,e+n); for(int i=1;i<n;++i){ int xx=Find(e[i].u); int yy=Find(e[i].v); if(emy[xx]&&emy[yy])ans+=e[i].w; if(emy[xx])fa[yy]=xx; else fa[xx]=yy; } printf("%lld\n",ans); return 0;}</span>
0 0
- newssoj1004逐个击破attack(排序+并查集)
- 洛谷 2700 逐个击破
- luogu 2700 逐个击破
- C#难点逐个击破(1):ref参数传递
- 剑指offer_面试题6_重建二叉树(分解步骤,逐个击破)
- IT项目十大灾难逐个击破
- CSharp难点逐个击破文档分享
- [来源未知][树形dp]逐个击破
- 2017.9.2总结1-逐个击破
- [练习][洛谷2700]Kruskal 逐个击破
- hdu1811(并查集+拓扑排序)
- hdu5222(拓扑排序+并查集)
- 并查集&拓扑排序 (hdu1811)
- C#难点逐个击破2out返回参数
- C#难点逐个击破3params数组参数
- JZOJ2936. 【NOIP2012模拟8.9】逐个击破(2017.9B组)
- 拓扑排序+并查集(MB hud 1811)
- FZU 2136 取糖果 (排序+并查集)
- 运用Polygon类绘制六边形
- 蓝汛ChinaCache助力大阅兵全球直播
- 数组和指针的区别
- HTTP 状态码的完整列表
- AJAX学习笔记
- newssoj1004逐个击破attack(排序+并查集)
- Python
- 继承中的构造方法
- 关于结构体的操作符重载和定义在内部的函数
- MyEclipse10.x添加jadClipse反编译插件
- 2015暑期多校训练第一场 1,2,3
- ios开发之多线程--GCD介绍
- Linux 硬限制和软限制 http://www.52ml.net/2624.html
- python list元素为dict时的排序