跳蚤国王和蛐蛐国王在玩一个游戏。
他们在一个 行 列的网格上排兵布阵。其中的 个格子中 ,每个格子有一只蛐蛐,其余的格子中,每个格子有一只跳蚤。
我们称占据的格子有公共边的两只跳蚤是相邻的。我们称两只跳蚤是连通的,当且仅当这两只跳蚤相邻,或存在另一只跳蚤与这两只跳蚤都连通。
现在,蛐蛐国王希望,将某些(零个,一个或多个)跳蚤替换成蛐蛐,使得在此之后存在至少两只跳蚤不连通。你需要首先判断蛐蛐国王的希望能否被达成。如果能够达成,你还需要最小化被替换的跳蚤的个数。
Constraints
, ,
Solution
观察可得:答案为 。分情况讨论如下:
当跳蚤数量 或跳蚤数量为 且只有一个连通块时,答案为 。
存在至少两个连通块时,答案为 。
连通块个数为 但存在割点时,答案为 。
其他情况答案为 。
主要过程在离散化建图。需要提取出每只蛐蛐周围的八个点,然后判断这些点里每只跳蚤向右和向下的最近的一个点,若是跳蚤则连上一条边。需要手动多围上一圈边界。
跑 tarjan 求割点即可。记得判断 和 的特殊情况。
Code
1 |
|