2019CCPC 秦皇岛 E.Escape
传送门 题意: 给出一个 \(n*m\) 的迷宫,有 \(a\) 个入口, \(b\) 个出口。 现在有 \(a\) 个机器人都从入口出发,一开始方向默认为下,你可以选在在一些格子上面放置一个转向器,转向器有四种: 向下走变为向右走; 向下走变为向左走; 向上走变为向右走; 向上走变为向左走。 每个格子最多放一个转向器。 问最后是否存在一种方案,使得每个机器人都能到达从其中一个出口。 思路: 因为题目要求转向器只能接受固定方向,并且变为固定方向,所以有几个比较重要的观察: 不存在两个机器人的路线共线; 若一个格子上存在转向器,那么至多只能经过一个机器人; 若一个格子上没有转向器,那么可以经过两个方向垂直的机器人。 观察一挺好证明,若存在两个机器人共方向,说明其中一个机器人经过转向器,而另一个没有经过,出现矛盾。后面几个yy一下应该好理解。 所以现在问题就是,一个格子只能横向经过或竖向经过,若经过转换器,只能经过一次,问能否使得 \(a\) 个机器人成功走到终点。 考虑网络流,我们将点拆成两类:一类是“水平”类点,另一类是“垂直”类点。那么一开始我们有水平和水平的相连,垂直的和垂直的相连,流量为 \(1\) 。 考虑经过转换器时,方向发生了变化,那么我们对于一个点,允许其向另一个方向转化,流量为 \(1\) 。 容易发现这样的建图刚好符合上面的要求。 PS:网上代码很多都是错的