题面

各大 \(OJ\) 都有

分析

从结果入手:所有被敌方军团占领的城市都是分开的

而按最小代价删去若干条边,则剩下的图必然是若干个联通子图组成的

那么我们要使花费最小,可以是留下的边最大

并查集合并两个敌方军团和不大于一集合即可

\(Code\)

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL; const int N = 1e5 + 5;
int n , k , vis[N] , fa[N];
LL ans , sum;
struct edge{
int x , y , z;
}e[N]; bool cmp(edge a , edge b){return a.z > b.z;}
int find(int x){return fa[x] == x ? x : fa[x] = find(fa[x]);}
int merge(int u , int v)
{
int x = find(u) , y = find(v);
if (vis[x] && vis[y]) return 0;
if (vis[x]) fa[y] = fa[x];
else fa[x] = fa[y];
return 1;
} int main()
{
scanf("%d%d" , &n , &k);
int x , y , z;
for(register int i = 1; i <= k; i++) scanf("%d" , &x) , vis[x + 1] = 1;
for(register int i = 1; i < n; i++)
scanf("%d%d%d" , &x , &y , &z) , e[i] = edge{++x , ++y , z} , ans += (LL)z;
sort(e + 1 , e + n , cmp);
for(register int i = 1; i <= n; i++) fa[i] = i;
for(register int i = 1; i < n; i++)
if (merge(e[i].x , e[i].y)) sum += (LL)e[i].z;
printf("%lld" , ans - sum);
}

最新文章

  1. eclipse安装Veloeclipse
  2. js创建标签的方法--依赖于jquery
  3. servlet+ajax+json字符串后台传入,前端解析并把数据循环填入表格实例
  4. scrot-0.8
  5. Asp.net Mvc4默认权限详细(上)
  6. POJ 1236 Network of Schools(tarjan算法 + LCA)
  7. NSA武器库知识整理
  8. SAP的 消息 弹出窗口(备忘)
  9. dedecms织梦网站图片集上传图片出现302错误图片提示怎么解决 已测
  10. Python爬虫8-ajax爬取豆瓣影榜
  11. 服务器Windows 登录 出现401 错误
  12. 阿里云短信服务bug
  13. 咸鱼入门到放弃4——Http协议
  14. Linux命令中:rsync和scp之间的区别
  15. DFS普及组常用模板简单整理
  16. Centos7搭建LAMP+Typecho博客
  17. Revit API 创建带箭头的标注
  18. oracle 创建表同时添加注释
  19. JAVA开发常用计算机命令
  20. 1260. [CQOI2007]涂色【区间DP】

热门文章

  1. APACHE正向代理配置
  2. 【大数据课程】高途课程实践-Day01:Python编写Map Reduce函数实现各商品销售量展示(类似wordcount)
  3. 最新 2022 年 Kubernetes 面试题高级面试题及附答案解析
  4. python连接MySQL数据库实现(用户登录测试功能)pymysql
  5. OpenJudge 1.8.11 图像旋转
  6. 动态更改Spring定时任务Cron表达式的优雅方案
  7. uniapp 打包app 引入高德地图
  8. 多线程爬取wallhaven
  9. Redis-02 Redis 类型
  10. centos搭建neo4j环境(含java)2021_12