题目大意

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

hihoCoder #1763 道路摧毁的更多相关文章

  1. [Offer收割] 编程练习赛63

    题目1 : 命名 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 有两个公司想要合并,第一个公司的名字是一个字符串S,第二个公司的名字是一个字符串T. 合并后的新公司是这样 ...

  2. hihoCoder 1425 : What a Beautiful Lake(美丽滴湖)

    hihoCoder #1425 : What a Beautiful Lake(美丽滴湖) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 ...

  3. hihocoder #1224 : 赛车 dfs

    #1224 : 赛车 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/1224 ...

  4. hihoCoder #1015 : KMP算法【KMP裸题,板子】

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  5. hihoCoder #1037 : 数字三角形 (动态规划)

    题目链接:https://hihocoder.com/problemset/problem/1037# 问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋 ...

  6. hihocoder #1032 : 最长回文子串 Manacher算法

    题目链接: https://hihocoder.com/problemset/problem/1032?sid=868170 最长回文子串 时间限制:1000ms内存限制:64MB 问题描述 小Hi和 ...

  7. 【占位】HihoCoder 1160 : 攻城略地(并查集好题)

    攻城略地 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 A.B两国间发生战争了,B国要在最短时间内对A国发动攻击.已知A国共有n个城市(城市编号1, 2, …, n),城 ...

  8. 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151

    本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下.  骨牌覆盖问题 ...

  9. hihoCoder #1014 : Trie树 [ Trie ]

    传送门 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互 ...

随机推荐

  1. 【洛谷4009】汽车加油行驶问题(SPFA乱搞)

    点此看题面 大致题意:给定一个\(N*N\)的方形网格,其中1表示这个格子有油库,0表示这个格子没油库,且汽车加满油可以行驶\(k\)条网格边.如果遇到油库必须加满油并花费\(A\)元,如果\(X\) ...

  2. 说说qwerty、dvorak、colemak三种键盘布局

    [qwerty布局] qwerty布局大家应该都很熟悉了,全世界最普及的键盘布局. 截止到去年接触并使用dvorak布局之前,我使用了十几年qwerty布局,在http://speedtest.10f ...

  3. js中随机数获取

    // 结果为0-1间的一个随机数(包括0,不包括1) var randomNum1 = Math.random(); //console.log(randomNum1); // 函数结果为入参的整数部 ...

  4. C# 运用DirectoryInfo类和FileInfo类

    DirectoryInfo类和FileInfo类的基类都是FileSystemInfo类,这个类是一个抽象类,也就是说你不可以实例化该类,只能通过继承产生其子类并实例化其子类.然而你却可以运用由该类定 ...

  5. C#的接口基础教程之五 实现接口

    1.显式实现接口成员 为了实现接口,类可以定义显式接口成员执行体(Explicit interface member implementations).显式接口成员执行体可以是一个方法.一个属性.一个 ...

  6. iphone丢失或忘记锁屏密码

    1.首先,我们要保证手机资料已经备份到iColud或者电脑(不想要恢复备份的可跳过该步骤) 2.保证,手机的  设置 → iCloud 处于打开状态: 3.手机的查找iphone软件登录了iColud ...

  7. C++的新特性for-each

    C++实验课要求用for each 循环来实现关联容器 map 的输出,一开始完全萌比.查了好久的资料才整理出下面的: C++11新特性之一就是类似java的for each循环: map<in ...

  8. BZOJ3679: 数字之积(数位dp)

    题意 题目链接 Sol 推什么结论啊. 直接大力dp,$f[i][j]$表示第$i$位,乘积为$j$,第二维直接开map 能赢! /* */ #include<iostream> #inc ...

  9. VPS搭建***

    yum -y install epel-release** yum update yum -y install python-setuptools m2crypto supervisor easy_i ...

  10. python中生成器对象和return 还有循环的区别

    python中生成器对象和return 还有循环的区别 在python中存在这么一个关键字yield,这个关键字在项目中经常被用到,比如我写一个函数不想它只返回一次就结束那我们就不能用return,因 ...