第一次见识到这个东西,觉得非常巧妙
一张二分图,左边的叫白点,右边的叫黑点
先手先从白点中选一点,然后后手必须选与之配对的黑点
以此往复,谁先不能选点谁就输了
首先我们先使用网络流求一遍二分图最大匹配
结论Ⅰ:若先手走的第一步不在最大匹配中,先手必胜
为了和先手走的后手走的白点对应,后手走的黑点一定在最大匹配
原因:若不在最大匹配,就形成了新匹配,不满足最大匹配
接下来每一步,先手只需要选与后手相匹配的白点即可
那么后手被动的选最大匹配中的黑点
由于后手先走最大匹配中的点,所以最后一定是后手先无路可走,先手胜
你可能有疑问,为什么后手不能走非最大匹配中的黑点来和白点匹配呢?
原因在于,如果有非最大匹配的黑点来匹配那个白点就矛盾了
因为形成了一条新的增广路,最大匹配更多了
回想一下匈牙利算法dfs找妹子腾空间的找增广路流程
如果这里找到没有和白点配对的黑点
那么就为最开始那个先手选的没有在最大匹配中的白点找到了位置
证毕
结论Ⅱ:若最开始先手走的点在所有的最大匹配中都存在,必输
这个很简单,相当于结论Ⅰ的逆否命题
问题来了,如何判断这个点一定在所有的最大匹配中
法一:
把这个点和相邻的边从图中删掉,再次求最大匹配,若匹配数减少一定在
但是这个做法不是那么的优秀,考虑优化
法二:
在所有的最大匹配中都出现过
也就是所有的最大流s到这个点的边都有流量
相当于在某个最大流方案中,s到这个点的边有流量,且残量网络不存在s到i的路径
那么求最大流的最后一次bfs中(无增广路,必定到不了t),s能到的点都会被标记起来
判断下即可