题解:P14581 [LNCPC 2025] 海鸥奇遇
Brilliance_Z · · 题解
这是本题的官方题解。
首先,因为海鸥数量等于食物数量,等于要求的指挥步数,一步指挥最多让一只海鸥飞离,所以海鸥与食物一一对应,每步指挥都要让一只海鸥飞离。
因此,原问题可以建模为二分图完美匹配问题。建立二分图:如果一只海鸥与一个方向距离最近的一份食物之间没有空格子,那么对它俩连一条无向边。因为一只海鸥最多与它的上下左右四个方向的各一份食物各连一条边,所以这张二分图的大小为
然后,指挥海鸥需要有顺序。建立有向图:如果一只海鸥与它当前匹配的食物之间有若干只海鸥,那么指挥这只海鸥的时间都要比这些海鸥的早,从这只海鸥向这些海鸥各连一条有向边。因为指挥一只海鸥的时间最多要求比它的上下左右四个方向的各一只海鸥的晚,所以一只海鸥的入度最多为四,这张有向图的大小为
现在需要解决当前这张有向图有环的问题。之所以从海鸥 A 向海鸥 B 连一条有向边,是因为海鸥 A 与它匹配的食物 C 之间有海鸥 B,所以海鸥 B 也有条件匹配食物 C。因此,对于当前这张有向图上的一个简单环
最后,对这张有向无环图执行拓扑排序(
总的时空复杂度:
Bonus
请思考:在二分图匹配中,如果让食物去匹配海鸥,并且优先匹配距离最近的海鸥,并且求最大匹配使用匈牙利算法,那么由此直接得到的有向图是否一定无环,无需任何调整操作?