#P16840. [GKS 2021 #A] Checksum

    ID: 19167 远端评测题 3000ms 1024MiB 尝试: 0 已通过: 0 显示难度普及+/提高− 上传者: 标签>图论2021生成树Google Kick Start

[GKS 2021 #A] Checksum

题目描述

Grace 和 Edsger 正在构造一个 N×NN \times N 的布尔矩阵 AA。第 ii 行第 jj 列的元素记为 Ai,jA_{i,j}。他们决定记下每一行和每一列的校验和(定义为给定元素列表的按位异或)。第 ii 行的校验和记为 RiR_i,第 jj 列的校验和记为 CjC_j。

例如,若 N=2N = 2,A=[1011]A = \begin{bmatrix} 1 & 0 \\ 1 & 1 \end{bmatrix},则 R=[10]R = [1 \quad 0],C=[01]C = [0 \quad 1]。

完成矩阵后,Edsger 将矩阵存储在电脑中。然而,由于病毒,Edsger 电脑中矩阵 AA 的某些元素被替换成了 −1-1。幸运的是,Edsger 仍然记得校验和的值。他想恢复矩阵,并向 Grace 寻求帮助。经过调查,Grace 从磁盘恢复 Ai,jA_{i,j} 的原始值需要花费 Bi,jB_{i,j} 小时。给定最终的矩阵 AA、代价矩阵 BB 以及每一行和每一列的校验和(RR 和 CC),你能帮助 Grace 确定恢复原始矩阵 AA 所需的最小总小时数吗?

输入格式

输入的第一行给出测试用例的数量 TT。接下来有 TT 个测试用例。

每个测试用例的第一行包含一个整数 NN。

接下来的 NN 行,每行包含 NN 个整数,表示矩阵 AA。第 ii 行的第 jj 个元素表示 Ai,jA_{i,j}。

再接下来的 NN 行,每行包含 NN 个整数,表示矩阵 BB。第 ii 行的第 jj 个元素表示 Bi,jB_{i,j}。

下一行包含 NN 个整数,表示行的校验和。第 ii 个元素表示 RiR_i。

再下一行包含 NN 个整数,表示列的校验和。第 jj 个元素表示 CjC_j。

输出格式

对于每个测试用例,输出一行,格式为 Case #x: y,其中 xx 是测试用例编号(从 11 开始),yy 是恢复矩阵 AA 所需的最小小时数。

3
3
1 -1 0
0 1 0
1 1 1
0 1 0
0 0 0
0 0 0
1 1 1
0 0 1
2
-1 -1
-1 -1
1 10
100 1000
1 0
0 1
3
-1 -1 -1
-1 -1 -1
0 0 0
1 1 3
5 1 4
0 0 0
0 0 0
0 0 0
Case #1: 0
Case #2: 1
Case #3: 2

提示

在样例 #1 中,A1,2A_{1,2} 可以通过第 11 行的校验和或第 22 列的校验和恢复。因此,Grace 无需花费任何时间恢复数据即可恢复矩阵。

在样例 #2 中,Grace 花费 11 小时恢复 A1,1A_{1,1}。之后,她可以利用第 11 行的校验和恢复 A1,2A_{1,2},利用第 11 列的校验和恢复 A2,1A_{2,1},然后利用第 22 行的校验和恢复 A2,2A_{2,2}。因此,Grace 只需花费 11 小时即可恢复矩阵。

在样例 #3 中,Grace 可以花费 11 小时恢复 A1,1A_{1,1},再花费 11 小时恢复 A2,2A_{2,2}。之后,她可以利用校验和恢复矩阵的其余部分。因此,Grace 总共花费 22 小时即可恢复矩阵。

限制条件

1≤T≤1001 \le T \le 100。

对于所有 i,ji, j,−1≤Ai,j≤1-1 \le A_{i,j} \le 1。

对于 Ai,j=−1A_{i,j} = -1 的 (i,j)(i, j),1≤Bi,j≤10001 \le B_{i,j} \le 1000,否则 Bi,j=0B_{i,j} = 0。

对于所有 ii,0≤Ri≤10 \le R_i \le 1。

对于所有 jj,0≤Cj≤10 \le C_j \le 1。

保证至少存在一种将 AA 中的 −1-1 替换为 00 或 11 的方式,使得 RR 和 CC 成立。

测试集 1

1≤N≤41 \le N \le 4。

测试集 2

1≤N≤401 \le N \le 40。

测试集 3

1≤N≤5001 \le N \le 500。

翻译由 DeepSeek V4 Pro 完成