题目

Description

已知无向连通图G由N个点,N-1条边组成。每条边的边权给定。现要求通过删除一些边,将节点1与另M个指定节点分开,希望删除的边的权值和尽量小,求此最小代价。

Input

每个输入文件中仅包含一个测试数据。

第一行包含两个整数N,M。

第二行至第N行每行包含3个整数,A、B、C,表示节点A与节点B有一条边相连,边权为C。

第N+1行至第N+M行每行包含一个整数X,表示要求与节点1分开的节点。

Output

输出文件仅包含一个整数,表示最小代价。

Sample Input

3 2
1 2 3
1 3 5
2
3

Sample Output

8

Data Constraint

Hint

对于20%的数据,2<=N<=10

对于100%的数据,2<=N<=10^6

分析

  • 树形DP
  • 设f[x]表示以x为根节点删除我需要点的最小值
  • f[x]+=min(f[y],map[x][y])

代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct node{
 4     int u,v,w,nx;
 5 }g[1000011*2];
 6 int cnt;
 7 int li[1000001*2];
 8 void add(int u,int v,int w)
 9 {
10     g[++cnt].u=u; g[cnt].v=v; g[cnt].w=w; g[cnt].nx=li[u]; li[u]=cnt;
11     g[++cnt].u=v; g[cnt].v=u; g[cnt].w=w; g[cnt].nx=li[v]; li[v]=cnt;
12 }
13 int flag[1000001];
14 int dp[1000001];
15 int b[1000001];
16 void dfs(int x)
17 {
18     int ff=0;
19     flag[x]=1;
20     for (int i=li[x];i;i=g[i].nx)
21     {
22         int y=g[i].v;
23         if (!flag[y])
24         {
25             if (b[g[i].v])
26               ff+=g[i].w;
27             else
28             {
29                 dfs(y);
30                 ff+=min(dp[y],g[i].w);
31             }
32         }
33     }
34     dp[x]=ff;
35 }
36 int main  ()
37 {
38     int n,m;
39     cin>>n>>m;
40     for (int i=1,x,y,z;i<=n-1;i++)
41     {
42         cin>>x>>y>>z;
43         add(x,y,z);
44     }
45     for (int i=1,x;i<=m;i++)
46     {
47         cin>>x;
48         b[x]=1;
49     }
50     memset(dp,0x3f,sizeof(dp));
51     dfs(1);
52     cout<<dp[1];
53 }

转载于:https://www.cnblogs.com/zjzjzj/p/11146436.html

JZOJ 2678. 树B相关推荐

  1. JZOJ 6276.树【扫描线】【线段树】

    233 题目: 题意: 分析: 代码: 题目: 传送门 题意: 有一棵无根树,现在有mmm个点对x,yx,yx,y,要求在任意u,vu,vu,v的简单路径上不能既经过xxx又经过yyy 问一共有多少路 ...

  2. [概率期望][树形DP][LCA]JZOJ 5814 树

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

  3. [树形dp] Jzoj P5814 树

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

  4. [JZOJ 5814] 树

    题目:从u到v经过多少条边. 思路: 考虑他是怎么走的?? 从\(u\)到\(v\)一定是\(fa[u]\),\(fa[fa[u]]\),反正就是走\(LCA\),那么如果算出每个点到父亲的期望步数, ...

  5. 【dfs】树(jzoj 2753)

    树 jzoj 2753 题目大意: 给你一棵树,每一个点都一个值,现在问你有多少条路径可以满足以下条件: 1.方向都是向下 2.路径上的点的值总和为S 输入样例 3 3 1 2 3 1 2 1 3 输 ...

  6. 【线段树】矮人排队(jzoj(gz) 3236)

    矮人排队 jzoj (gz)3236 题目大意: 有n个人,高度分别为1,2--n(高度按输入来看),现在有两种操作 1:把第x个人和第y个人换一下 2:询问高度为A,A+1--B这B-A+1个人是否 ...

  7. [JZOJ 5909] [NOIP2018模拟10.16] 跑商(paoshang) 解题报告 (圆方树)

    题目链接: https://jzoj.net/senior/#contest/show/2529/2 题目: 题目背景: 尊者神高达很穷,所以他需要跑商来赚钱 题目描述: 基三的地图可以看做 n 个城 ...

  8. JZOJ 7036. 2021.03.30【2021省赛模拟】凌乱平衡树(平衡树单旋+权值线段树)

    JZOJ 7036. 2021.03.30[2021省赛模拟]凌乱平衡树 题目大意 给出两棵Treap,大小分别为 n , m n,m n,m,每个点的 p r i o r i t y priorit ...

  9. JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树

    梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...

最新文章

  1. 智能车竞赛技术报告 | 智能车视觉 - 首都师范大学 - 首师智能视觉
  2. 如何用 Swift 语言构建一个自定控件
  3. CCIE-LAB-第九篇-BGP下一跳+EBGP防环+伪装AS+通过标签过滤路由
  4. mysql书写规则_每天10分钟带你学会MySQL(二)SQL语句的基本书写规则
  5. 匿名内部类 handler
  6. java synchronized静态同步方法与非静态同步方法,同步语句块
  7. 【MyBatis框架】mapper配置文件-foreach标签
  8. 曼昆经济学原理(微经部分)笔记整理
  9. Maven—Windows操作系统中安装配置Maven环境
  10. 微信小程序代码提交步骤
  11. 如何用Python快速计算股票的Beta系数并排序存入Excel表中
  12. macOS Catalina 以上版本使用不了 PPTP协议的(shimo 无法正常使用)
  13. STC15内部ADC测电压
  14. python重复抽奖_python—抽奖程序
  15. 【SpringBoot学习】39、SpringBoot 集成 wxJava 微信小程序:订单支付
  16. 磊科wifi linux驱动下载,磊科随身WiFi驱动
  17. SQL Server 2012 联机丛书
  18. APP自动化测试框架搭建(八)--ATX Server2多设备集群环境搭建
  19. 埃哲森:物联网市场潜力达万亿美元
  20. 计算机二级c类考试试题及答案,2016最新计算机二级C上机考试试题及答案

热门文章

  1. jQuery.each() 和原生JS的for loop效率对比
  2. SAP CRM Fiori应用之My Account功能一览
  3. Jerry的SAP Kyma和Kubernetes讲座的幻灯片分享
  4. SAP CRM, C4C和Hybris的后台作业
  5. pscs6插件_PS插件-灯光工厂
  6. php 追查框架生命周期,ThinkPHP5框架的生命周期:从发出请求到响应完成
  7. delphi Oracle导出多个表,Oracle数据库自动备份工具(Delphi源码)
  8. sarscape 将dem文件转化成stl_STL源码剖析 阅读笔记(一)介绍
  9. 公众号滑动图代码_如何实现微信公众号文章“滑动查看更多”
  10. python内建函数是什么意思_Python3内建函数简介,Python3内建函数详解