#eFTFGlydlt60x6903. 骑士放置

骑士放置

好的,这是整理好的题面,不含解题思路,只包含样例解释。


题目描述

给定一个 N×MN \times M 的棋盘,有一些格子禁止放棋子。

问棋盘上最多能放多少个不能互相攻击的国际象棋骑士。

骑士的攻击方式:按“日”字,即 (dx,dy)=(±1,±2)(dx,dy)=(\pm1,\pm2)(±2,±1)(\pm2,\pm1),可以攻击到其他位置的骑士(没有“别马腿”规则)。


输入格式

第一行包含三个整数 N,M,TN,M,T,其中 TT 表示禁止放置的格子的数量。
接下来 TT 行,每行包含两个整数 xxyy,表示位于第 xx 行第 yy 列的格子禁止放置,行列数从 11 开始。

输出格式

输出一个整数,表示最多能放置的骑士数。

数据范围

1N,M1001 \le N,M \le 100


输入样例

2 3 0

输出样例

4

样例解释

N=2,M=3,T=0N=2, M=3, T=0(没有禁止格)。

棋盘是 2×32\times 3 的格子:

(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)

骑士的攻击范围是“日”字形,在这个小棋盘上,最多能放多少个互不攻击的骑士?

尝试放置: 一种方案:

  • 放在 (1,1), (1,3), (2,1), (2,3)
    检查攻击:
    (1,1) 与 (1,3) 差 (0,2) 不攻击
    (1,1) 与 (2,1) 差 (1,0) 不攻击
    (1,1) 与 (2,3) 差 (1,2) → 这是“日”字攻击((1,2) 或 (2,1) 是攻击方式,差 (1,2) 对应骑士攻击,对,所以 (1,1) 和 (2,3) 互相攻击,不能同时放)

所以上面方案不行。


重新考虑:
将棋盘按国际象棋棋盘方式染色(黑白相间),骑士总是从黑格跳到白格,从白格跳到黑格,所以攻击关系只在黑白格之间。
因此这是一个二分图(黑格与白格之间可能攻击)。

2×32\times 3 棋盘染色(设 (1,1) 为黑): 黑: (1,1),(1,3),(2,2)
白: (1,2),(2,1),(2,3)

检查攻击关系:

  • (1,1) 攻击 (1,2)? 不(差 (0,1) 不是日字)
    (1,1) 攻击 (2,3)? 是(差 (1,2))
    (1,1) 攻击 (2,1)? 不(差 (1,0))
    ...

实际我们可以直接找最大独立集:二分图最大独立集 = 总点数 - 最大匹配。

已知 2×3=62\times3=6 个格,可以找到最大匹配数,然后得到最大独立集大小。

通过尝试发现,最大可以放 4 个互不攻击的骑士:
例如放在 (1,1),(1,2),(2,2),(2,3)
检查:
(1,1) 与 (2,3) 差 (1,2) 攻击,但这里 (2,3) 有骑士,(1,1) 也有骑士,所以不行?我们要检查这些位置是否互相攻击,需要逐对检查。

不如枚举小棋盘:
2×32\times3 棋盘,一种可行方案是放满 6 个?不可能,相邻日字位置会攻击。
尝试: (1,1),(1,3),(2,1),(2,3) 不行,因为 (1,1) 与 (2,3) 攻击。
换 (1,1),(1,2),(2,2),(2,3) 也不行,因为 (1,2) 与 (2,2) 差 (1,0) 不攻击,但 (1,2) 与 (2,3) 差 (1,1) 不攻击,(2,2) 与 (1,1) 差 (-1,-1) 不攻击,(2,2) 与 (2,3) 差 (0,1) 不攻击,(2,2) 与 (1,2) 差 (-1,0) 不攻击,似乎都不攻击?等等,骑士攻击是 (±1,±2) 或 (±2,±1),这里所有差都不是这种,所以确实不攻击。

那么 (1,1),(1,2),(2,2),(2,3) 四个位置都互不攻击,因此可以放 4 个。

能否放 5 个?
2×32\times3 共 6 格,如果放 5 个,相当于只有 1 个空位。骑士攻击会导致很多位置不能共存,试一下不行。

因此最大是 4。


输出 4