hihoCoder #1763 道路摧毁

题目大意

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 问题。

posted @ 2018-06-11 13:29  Pat  阅读(180)  评论(0编辑  收藏  举报