#796. 棋盘(chess)
棋盘(chess)
题目描述
给你一个 行 列的国际象棋棋盘。最初棋盘上有 个红色骑士(骑士是国际象棋中的马),你需要在每个格子上放置一个骑士,并为其选择一种颜色:白色或黑色(红色骑士的位置与颜色在输入中已给出,剩余格子由你填白或黑)。每个格子恰好放一个骑士。
骑士的走法为“日”字:若骑士在 ,则它可以攻击 当且仅当满足任一条件:
- 且 ,或
- 且 。
下面是一些骑士可以攻击哪些格子的示例。在下图中,如果骑士当前在蓝色格子,则它可以攻击所有红色格子(且仅能攻击这些格子)。

定义一次 骑士对决 为一对不同颜色的骑士互相攻击(即两个格子上的骑士颜色不同且位置互为骑士可攻击的位置)。
你的目标是:在剩余格子中任意选择白/黑两色放置骑士,使得骑士对决的总数最大化。输出这个最大值。
输入格式
输入包含多组测试数据。
-
第一行包含一个整数 ,表示测试数据组数。
-
对于每组测试数据:
- 第一行包含三个整数 ,表示棋盘为 ,初始有 个红色骑士。
- 接下来 行,每行两个整数 (),表示棋盘上在位置 放有一个红色骑士。保证没有两个红色骑士放在同一格。
坐标系约定:行号 从 到 ,列号 从 到 。
输出格式
对于每组测试数据,输出一行,包含一个整数:在最优填色方案下,最多可能产生的骑士对决对数。
样例输入 1
2
2 4 3
1 1
1 4
2 1
2 3 1
2 3
样例输出 1
4
2
说明
样例解释
一个可能的最优布置(颜色用 红, 黑, 白 表示两种你可选颜色中的一种)如下图示(示意)可以得到 对骑士对决,例如:
- 的红骑士攻击 的黑骑士;
- 的黑骑士攻击 的红骑士;
- 的黑骑士攻击 的白骑士;
- 的红骑士攻击 的白骑士。

样例 2
见选手目录下的 chess/chess2.in 与 chess/chess2.ans。
该测试用例满足测试点 的约束条件。
样例 3
见选手目录下的 chess/chess3.in 与 chess/chess3.ans。
该测试用例满足测试点 的约束条件。
样例 4
见选手目录下的 chess/chess4.in 与 chess/chess4.ans。
该测试用例满足测试点 的约束条件。
样例 5
见选手目录下的 chess/chess5.in 与 chess/chess5.ans。
该测试用例满足测试点 的约束条件。
数据范围
对于 的数据,满足:
- ;
- ;
- 。
保证没有两个红色骑士在同一格子上。
各测试点的附加限制如下表所示:
| 测试点编号 | 备注 | ||
|---|---|---|---|
| 无 | |||
| (无初始红骑士) | |||
| 无 | |||