题目大意

A 国一共有 $n$ 个城市且有 $n-1$ 条双向道路,且任意两个城市都可以通过道路互相到达。

现在 B 国给出了两个城市的集合 $X,Y$,你需要摧毁若干条 A 国的道路,使得任意一个在 X 中的城市无法到达任何一个 Y 中的城市。

现在给定每条道路摧毁需要付出的代价,求一个代价之和最小的方案。

数据范围

$ n\le 2\times 10^5 $
$ 1 \le w \le 10^9 $ ($w$ 表示摧毁道路的代价)

分析

最小割

这道题实际上是求无向图最小割,因此可以套网络流的模板。

建图:

  • 将 $X$ 中的点缩成一点 $s$,将 $Y$ 中的点缩成一点 $t$

这里我有一个疑问:缩点之后得到的无向图中的每条边 $(u,v)$,在流网络中要加两条有向边 $(u\to v) $ 和 $(v\to u)$ 吗?
还是说可以先进行一次 DFS 或 BFS 将边从 $s$ 到 $t$ 定向?

树形 DP

这里介绍一个树形 DP 的解法。

为了便于表述,给树的节点标号。 $X$ 中的节点标号为 1,$Y$ 中的节点标号为 $2$,余下的节点标号为 $0$ 。

我们称一棵有根树拆了若干条边(也可能一条边都不拆)之后是合法的, 当且仅当拆边之后的图中不存在两个标号分别为 1 和 2 的连通节点。

我们将所有合法的图分成三类:

  • 存在一个标号为 1 的点与根节点连通
  • 存在一个标号为 2 的点与根节点连通
  • 不属于前两类

据此不难定义 DP状态,写出转移方程。

至此,我们将这个问题转化成了一个典型的(子树合并)树形 DP 问题。

最新文章

  1. linux rsync配置文件参数详解
  2. fat32转ntfs
  3. oh-my-zsh主题
  4. 常用的WinAPI函数整理
  5. pandas处理数据
  6. C#常用错误
  7. HTML5学习总结-03 地理定位
  8. [CC]Plugin-提取ISS3D关键点
  9. free pascal 错误代码表
  10. WPF中的画图
  11. 评估指标:准确率(Precision)、召回率(Recall)以及F值(F-Measure)
  12. flash 入门课知识小结
  13. 关于事件监听机制的总结(Listener和Adapter)
  14. Sequence
  15. 用ant重新编译jdk加入调试信息
  16. Linux网络管理——子网掩码
  17. JS显示动态的系统时间--JavaScript基础
  18. [02-01]Java学习路线(完整详细版)
  19. ant 执行jmeter脚本
  20. 10款基于jquery的web前端动画特效

热门文章

  1. 【洛谷4657】[CEOI2017] Chase(一个玄学的树形DP)
  2. python 数据库操作 SQLite、MySQL 摘录
  3. git常用命令以及速查命令
  4. ASIHTTPRequest的使用
  5. SpingBoot之多Profile文件
  6. Vue插槽
  7. vue 判断是否登录,未登录跳转到登录页
  8. HUD:3746-Cyclic Nacklace(补齐循环节)
  9. billard:桌球的走位路线图解
  10. Linux下Oracle JDK替换Open JDK