题意
小AA和小YY得到了《喜羊羊和灰太狼》的电影票,都很想去观看,但是电影票只有一张,于是他们用智力游戏决定胜负,赢得游戏的人可以获得电影票。
在 N ∗ M N*M N∗M 的迷宫中有一个棋子,小AA首先任意选择棋子放置的位置。然后,小YY 和小AA轮流将棋子移动到相邻的格子里。游戏的规则规定,在一次游戏中,同一个格子不能进入两次,且不能将棋子移动到某些格子中去。当玩家无法继续移动棋子时,游戏结束,最后一个移动棋子的玩家贏得了游戏。
例如下图所示的迷宫,迷宫中表示棋子可以经过的格子,而 “#” 表示棋子不可以经过的格子:
. # # .~\#~\# . # #
. . . .~.~. . . .
# . # \#~.~\# # . #
若小AA将棋子放置在 ( 1 , 1 ) (1,1) (1,1),则小AA则无论如何都无法赢得游戏。
而若小AA将棋子放置在 ( 3 , 2 ) (3,2) (3,2) 或 ( 2 , 3 ) (2,3) (2,3) ,则小AA能够贏得游戏。例如,小AA将 棋子放畀在 ( 3 , 2 ) (3,2) (3,2),小YY只能将它移动到 ( 2 , 2 ) (2,2) (2,2) ,此时小AA再将棋子移动到 ( 2 , 3 ) (2,3) (2,3), 就贏得了游戏。
小AA和小YY都是绝顶聪明的小朋友,且从不失误。小AA到底能不能赢得这场游 戏,从而得到珍贵的电影票
对于 100 % 100 \% 100% 的数据,有 1 ≤ n , m ≤ 100 1 \le n,m \le 100 1≤n,m≤100 。
对于 30 % 30 \% 30% 的数据, 有 1 ≤ n , m ≤ 5 1 \le n,m \le 5 1≤n,m≤5。
题解
比较套路地将格子黑白染色,相邻的连边,可以得到一个二分图,问题变成有哪些点可以从它出发沿着边走必胜。
由于在二分图上走交替路的过程和匈牙利算法相似,考虑二分图最大匹配。
先考虑特殊情况:如果存在完美匹配,则不管从哪个点出发,只要对方沿着匹配边走,你最多只能沿着非匹配边走到匹配点,然后对方再走匹配边,你早晚会死的。
否则,考虑把对方逼到这种局面:从任意一个非匹配点出发,对方只能走到匹配点(否则原来不是最大匹配),然后你沿着匹配边走,对方在走只能沿着非匹配边走到一个匹配点(如果可以走到非匹配点的话,把这条路径画出来,会发现匹配数可以增加),以此类推你就win了。
于是问题转化为求哪些点可能不在最大匹配中:先求出任意一个最大匹配,把非匹配点拿去寻找可能成为非匹配的点。考虑用它所连的非匹配边去替换,则通过非匹配边连向的匹配点对应的匹配点是可以被替换掉的,新产生一个可行点后继续更新,是一个dfs的过程。