govanitics的博客

博客

Keep Clicking, keep flipping 题解

2020-10-15 08:25:40 By govanitics

如果有一个至少两个点的全是白点组成的联通块,那么一定无解,因为这些点无论如何也无法进行消除。我们称这样的联通块为坏联通块,那么我们就要尽量避免产生坏联通块。

事实上我们可以证明没有坏联通块时一定有解。考虑以下这个贪心策略:我们每次选择能使操作后黑点个数最多的黑点。我们只需要证明它不会产生坏联通块,我们就可以对单点的白联通块施归纳来证明。

一个点x对黑点个数的贡献就是x周围的白点个数-x周围的黑点个数-1,我们记x的价值为x周围的白点个数-x周围的黑点个数。

考虑反证法,如果u是一个价值最大的点,而删去它产生了一个坏联通块。由于原图没有坏联通块,坏联通块中一定有一个与u相邻的黑点v。

考虑u的白色邻接点,这些点必须也是v的白色邻接点,否则这些点就会变成黑色并与v相连。类似地,考虑v的黑色邻接点,这些点必须也是u的黑色邻接点,否则它们仍然是v的黑色邻接点。

那么我们就有v的白邻居个数>=u的白邻居个数,v的黑邻居个数<=u的黑邻居个数,所以v的分数不低于u,那么只能等于u的分数,此时我们就有u,v的邻居完全相同,那么v就会成为一个孤立的白点,矛盾。

直接模拟这个过程,手写bitset优化,复杂度 $O(n^3/w)$

govanitics Avatar