P7479
先预处理出黑棋连通块的“气”。
给定的黑棋连通块会将整个棋盘划分出若干个空白连通块。而白棋只能放在这些空白连通块中。
如果存在一个空白连通块,它属于黑棋连通块的“气”,那么只有用白棋去填满这个空白连通块,才能使黑棋连通块在这个空白连通块的“气”变为
但是与此同时,白棋连通块的“气”也将变为
因此若想使黑棋连通块的“气”变为
若黑棋连通块的“气”覆盖了超过一个空白连通块,那么无论如何都不能使黑棋连通块的“气”变为
若黑棋连通块的“气”覆盖了不超过一个空白连通块,则可以先将它的“气”未覆盖的空白连通块中的“气”全部吃掉,方法是以空白连通块中不是黑棋连通块的“气”的格子为白棋的“气”,不断蚕食黑棋连通块的“气”,这样一定是可以做到的。最后,若有一个属于黑棋连通块的“气”的空白连通块,则直接填满即可,过程一定可以做到合法。
现在代码写起来就比较容易了:直接bfs搜空白联通块,然后判断它是否属于黑棋连通块的“气”即可。然后统计,判断,这道题就做完了。