【做题记录】王者之剑
作者:互联网
-
\(\text{P4474}\) 王者之剑
- 算法:最小割
题目:
-
可以拿走所在方格宝石获得其价值。
-
在偶数秒周围四格的宝石会消失。
-
每秒可以选择移动上下左右一格或不动。
求最大价值。
\(n,m\le 100\)
题解:
看到二次元女朋友吾王就进来冲了/se /se
好了不扯了。
显然的网络流。还是考虑割点,将每个点分为入点和出点,然后连接这两个的边的流量就是其价值。
然后这题比较特别的地方就是偶数秒周围的点消失。
那么我们可以推出两个重要性质:
- 只可能在偶数秒取到宝石。
因为若在奇数秒取得宝石,那么在上一秒为偶数秒时正在格子周围,会将此格子消去,所以上一秒是可能原地不动,那么也就是在偶数秒到达格子并取。
- 不可能取到两个相邻的点。
不妨设为 \(x,y\),先取了 \(x\),又第一条性质知此时必为偶数秒,那么 \(y\) 就会被删。
相邻的格子不能被同时取到,又这一性质可以想到对这整个格图做黑白相邻染色。
先抛弃这样做的正确性,那么我们将奇数点连向源点,偶数点连向汇点。奇偶点之间用 inf 连接。
那么就是个二分图匹配。
然后跑一个最小割。
知道做法了,我们来看这样做的正确性。
这里先推荐一下 RemiliaScarlet◎
的题解,讲的还是很详细的。
我们来证明一下我们这样做的正确性。
首先黑白染色。
然后,我们考虑奇偶。
如果两个宝石颜色相同,说明他们奇偶性相同,可以直接获得。
如果奇偶不同,那么就需要改变一次奇偶。而改变时间奇偶只需在某一格停下。
但是我们是不能随便停下的,因为有可能停下后是偶数秒后将周围格子宝石消去。
比如上图中我们从 \((1,1)\) 想要去取 \((1,4)\) 的宝石,由于两个宝石奇偶性不同,所以我们需要在中途停下一秒。如果我们在 \((1,2)\) 停下了,那么 \((2,2)\) 就会被删去。
我们简单考虑转移从上一行至下一行。
所以我们考虑那些没有宝石且下方也没有宝石的格子,对其进行讨论是否能停留。
为什么要下方也没有格子?
如上面举的例子,如果在 \((1,2)\) 停留就会对 \((2,2)\) 造成影响,所以我们真正只能考虑不仅自身没有宝石,下方也没有宝石的格子。
好,那么我们来进行讨论。
对于这种特殊的格子,我们用蓝色对其染色。
我们来分类讨论:(\(1\) 表示灰(有宝石),\(0\) 表示白,\(*\) 表示蓝)
- \(1*1\) 停留。
- \(0*0\) 停留或走。
- \(1*0/0*1\) 直接走。
- \(**...*\) 按照 \(0,1,0...\) 的顺序随便。
所以,对于任何一种情况,都会有一种方案对应。
所以我们直接跑最小割是对的。
剩下的很简单了,板子的最小割,然后标记个上下左右的方向即可。
双倍经验方格取数。
标签:奇偶,那么,宝石,格子,记录,王者,偶数,之剑,我们 来源: https://www.cnblogs.com/trsins/p/15777654.html