P4142 洞穴遇险 题解
主要思想:拆点,黑白染色。
首先能想到的是只在 \(x+y\) 为奇数的格子上放柱子,原因显然。
接下来转化题意:求最小不稳定数不就是求放柱子能减少的最大不稳定数,于是我们现在着力解决放柱子能减少的最大不稳定数。
题目已经暗示我们要黑白染色,于是网格点被染为两类: \(x+y\) 为奇数(我们称为黑点)和 \(x+y\) 为偶数(我们称为白点)。
于是想到一个错误但能为正解提供思路的想法:
- 我们考虑类似二分图匹配的方式:因为每个偶数格子只能被选一次,所以将源点向每个黑点连边。在将每个能放柱子的黑点向每个与他相邻白点连边,再将每个白点向汇点连边。但是因为每个黑点上的柱子只会占用他相邻的两个柱子,所以将黑点拆点作为入点和出点,将黑点的入点与出点之间连容量为 \(2\) 的边代表每个黑点只会占用他相邻的两个白点。
这个做法看似很对,但是有个很显然的问题:无法保证它占用的连个白点位置是否满足形状要求,于是这个做法陷入僵局了。
但我们只需要在此基础上满足最后图形形状限制就好了,怎么做呢?
既然我们将黑点拆点满足了黑点只能占两个白点的限制,那我们考虑用类似的方法也满足白点限制就行了。但显然拆点是无能为力了,观察到每个黑点只会占用相邻的两个处于不同奇偶性列数的白点,于是我们试试黑白染色:我们再将处于奇数列白点染为灰色,否则仍为白点。
这时我们可以将灰点连向黑点,再将黑点连向白点,容量为 \(1\)。只不过此时我们黑点入点与出点之间的边容量需要改为 \(1\);将源点向汇点连边,将白点向汇点连边。
总结:
-
将源点向每个灰点连费用 \(0\) 容量 \(1\) 的边代表每个灰点只能选一次。
-
将灰点向他每个相邻的黑点的入点连费用 \(0\) 容量 \(1\) 的边代表每个灰点只能匹配一个黑点。
-
将黑点的入点和出点之间连费用 \(w_{x,y}\) 容量 \(1\) 的边代表每个黑点只能选一次且费用为该点权值(\((x,y)\) 为该点坐标)。
-
将黑点出点向他每个相邻的白点连费用 \(0\) 容量 \(1\) 的边代表每个黑点只会占用一个白点。
-
最后将白点向汇点连费用 \(0\) 容量 \(1\) 的边代表每个白点只选一次。
以上连边均不包含已经坍塌的点。

浙公网安备 33010602011771号