题目背景

三大战役的平津战场上,傅作义集团在以北平、天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜。为了就地歼敌不让其逃走,毛主席制定了先切断敌人东西两头退路然后再逐个歼灭敌人的战略方针。秉承伟大军事家的战略思想,作为一个有智慧的军长你,遇到了一个类似的战场局面。

题目描述

现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的,现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算出花费最少的代价将这K个地方军团互相隔离开,以便第二步逐个击破敌人。

输入输出格式

输入格式:

第一行包含两个正整数n和k。

第二行包含k个整数,表示哪个城市别敌军占领。

接下来n-1行,每行包含三个正整数a,b,c,表示从a城市到b城市有一条公路,以及破坏的代价c。城市的编号从0开始。

输出格式:

输出一行一个整数,表示最少花费的代价。

输入输出样例

输入样例#1:

5 3
1 2 4
1 0 4
1 3 8
2 1 1
2 4 3
输出样例#1:

4

说明

【数据范围】

10%的数据:2≤n≤10;

100%的数据:2≤n≤100000,2≤k≤n,1≤c≤1000000。

思路:正难则反,如果正着很难想,就反过来,贪心的给所有的边从大到小去排个序,然后用并查集去维护看看两个集合能否合并,如果这两个集合中有人相互敌对就不能,反之就可以。最后的答案就是ans-维护的值。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN 100001
using namespace std;
int n,k;
long long ans;
int vis[MAXN],fa[MAXN];
struct nond{
int x,y,z;
}edge[MAXN];
int cmp(nond a,nond b){
return a.z>b.z;
}
int find(int x){
if(fa[x]==x) return x;
else return fa[x]=find(fa[x]);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=k;i++){
int x;
scanf("%d",&x);
vis[x]=;
}
for(int i=;i<n;i++){
scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].z);
ans+=edge[i].z;
}
sort(edge+,edge++n-,cmp);
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<n;i++){
int dx=find(edge[i].x);
int dy=find(edge[i].y);
if(!(vis[dx]&&vis[dy])){
fa[dy]=dx;
vis[dx]=(vis[dx]||vis[dy]);
ans-=edge[i].z;
}
}
cout<<ans;
}

最新文章

  1. 无法启动xwindow
  2. 【thinkphp5】【THINKCMG】标签部分开发(一)
  3. 如何在 ie6 中使用 &quot;localStorage&quot;
  4. Android Studio插件安装及使用Genymotion模拟器
  5. scrapy2_初窥Scrapy
  6. Python学习资料整理以及书籍、开发工具推荐
  7. 奇怪的梦境(codevs 2833)
  8. 【转】TCP的SEQ和ACK的生成
  9. C#构造函数相关主题
  10. HTTP/1.1与HTTP/1.0的区别[转]
  11. 露脸!钉钉通过SOC2隐私性原则审计,安全和隐私保护达超一流国际标准
  12. 从主机A得到id_rsa.pub文件,在主机B创建用户danny加入该文件,实现主机A免密登录主机B
  13. mongodb+nodejs
  14. JAVA获取运行环境的信息
  15. 关于ADC采集
  16. 解决Kubernetes 1.7.3 kube-apiserver频繁异常重启的问题(转)
  17. JavaScript中的单引号和双引号解决
  18. fastcgi main
  19. Android给TextView设置透明背景、圆角边框
  20. PL/SQL编程—包

热门文章

  1. php 文件夹 与 文件目录操作
  2. 洛谷 1775. [国家集训队2010]小Z的袜子
  3. Quartz.Net 使用心得(一)
  4. AlertDialog自己定义View的使用方法+怎样改变弹出框的大小
  5. VC与JavaScript交互(一) ———— 怎样实现
  6. UVA 11346 - Probability 数学积分
  7. 门面模式(Facade)
  8. Nginx系列(三)--管理进程、多工作进程设计
  9. Oracle新建Schema
  10. FFMpeg在Windows下搭建开发环境【转】