A16514 | Simons and Reconstructing His Roads
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
一直在下落,但我总能找到出口。
—— SHUN, [DYING FOR YOU](https://open.spotify.com/track/2akBCXjdlUgpyZ4cr1t3B9)
城市中有 $n \times m$ 个路口,编号为 $(1, 1), (1, 2),\ldots, (n, m)$。第一个数字表示行号,第二个数字表示列号。
仅存在(且只存在)如下两种街道:$ (i,j) $ 与 $ (i+1,j) $ 之间有街道,或 $ (i,j) $ 与 $ (i,j+1) $ 之间有街道。$ (i, j) $ 与 $ (i + 1, j) $ 之间的街道权值为 $w_{i,j}$,$ (i, j) $ 与 $ (i, j + 1) $ 之间的街道权值为 $v_{i,j}$。
Simons 计划重建一些街道。由于一些事故,有些街道无法被重建,其他的街道可选择性重建。
对于每个路口,如果与其相邻的被重建街道条数为偶数,Simons 将该路口称为“优雅”的。如果所有路口都是优雅的,则称整个重建方案为“优美重建”。
重建方案的美丽度计算如下:
- 最开始美丽度为 $0$。
- 对于每一行 $i$ 从 $1$ 到 $n-1$,设本行被重建的街道在第 $c_1 < c_2 < c_3 < \cdots$ 列,则将 $w_{i, c_1} - w_{i, c_2} + w_{i, c_3} - w_{i, c_4} + \cdots$ 累加到美丽度中。
- 同理,对于每一列 $j$ 从 $1$ 到 $m-1$,设本列被重建的街道在第 $r_1 < r_2 < r_3 < \cdots$ 行,则将 $v_{r_1, j} - v_{r_2, j} + v_{r_3, j} - v_{r_4, j} + \cdots$ 累加到美丽度中。
换句话说,如果某条街道在其所属行或列被重建的街道中处于奇数位置,则将权值加到美丽度中;否则减去权值。
例如,下图中的街道和路口均可被重建:

我们可得到如下的优美重建方案:

该重建方案的美丽度为 $3+4+2-(-9)-(-2)+9+1-(-1)-(-3)-(-4)=38$。
请你帮助 Simons,求出所有优美重建方案中美丽度的最大值。
—— SHUN, [DYING FOR YOU](https://open.spotify.com/track/2akBCXjdlUgpyZ4cr1t3B9)
城市中有 $n \times m$ 个路口,编号为 $(1, 1), (1, 2),\ldots, (n, m)$。第一个数字表示行号,第二个数字表示列号。
仅存在(且只存在)如下两种街道:$ (i,j) $ 与 $ (i+1,j) $ 之间有街道,或 $ (i,j) $ 与 $ (i,j+1) $ 之间有街道。$ (i, j) $ 与 $ (i + 1, j) $ 之间的街道权值为 $w_{i,j}$,$ (i, j) $ 与 $ (i, j + 1) $ 之间的街道权值为 $v_{i,j}$。
Simons 计划重建一些街道。由于一些事故,有些街道无法被重建,其他的街道可选择性重建。
对于每个路口,如果与其相邻的被重建街道条数为偶数,Simons 将该路口称为“优雅”的。如果所有路口都是优雅的,则称整个重建方案为“优美重建”。
重建方案的美丽度计算如下:
- 最开始美丽度为 $0$。
- 对于每一行 $i$ 从 $1$ 到 $n-1$,设本行被重建的街道在第 $c_1 < c_2 < c_3 < \cdots$ 列,则将 $w_{i, c_1} - w_{i, c_2} + w_{i, c_3} - w_{i, c_4} + \cdots$ 累加到美丽度中。
- 同理,对于每一列 $j$ 从 $1$ 到 $m-1$,设本列被重建的街道在第 $r_1 < r_2 < r_3 < \cdots$ 行,则将 $v_{r_1, j} - v_{r_2, j} + v_{r_3, j} - v_{r_4, j} + \cdots$ 累加到美丽度中。
换句话说,如果某条街道在其所属行或列被重建的街道中处于奇数位置,则将权值加到美丽度中;否则减去权值。
例如,下图中的街道和路口均可被重建:

我们可得到如下的优美重建方案:

该重建方案的美丽度为 $3+4+2-(-9)-(-2)+9+1-(-1)-(-3)-(-4)=38$。
请你帮助 Simons,求出所有优美重建方案中美丽度的最大值。
输入格式
每个测试点包含多组测试数据。第一行包含整数 $t$,表示测试数据组数($1 \le t \le 5\cdot 10^4$)。
每组数据第一行包含两个整数 $n$ 和 $m$($2\le n,m\le 2\cdot 10^5$,$n\cdot m\le 4\cdot 10^5$)——表示行数和列数。
接下来 $n-1$ 行,每行 $m$ 个整数 $w_{i,j}$($-10^9\le w_{i,j}\le 10^9$),表示 $ (i, j) $ 与 $ (i+1, j) $ 之间的街道权值。
接下来 $n$ 行,每行 $m-1$ 个整数 $v_{i,j}$($-10^9\le v_{i,j}\le 10^9$),表示 $ (i, j) $ 与 $ (i, j+1) $ 之间的街道权值。
接下来 $n-1$ 行,每行 $m$ 个字符 $p_{i,j}$($p_{i,j}\in\{\texttt{0},\texttt{1}\}$),若 $p_{i,j}=\texttt{0}$,表示 $ (i, j) $ 与 $ (i+1, j) $ 之间的街道无法重建,反之可以重建。
接下来 $n$ 行,每行 $m-1$ 个字符 $q_{i,j}$($q_{i,j}\in\{\texttt{0},\texttt{1}\}$),若 $q_{i,j}=\texttt{0}$,表示 $ (i, j) $ 与 $ (i, j+1) $ 之间的街道无法重建,反之可以重建。
保证所有测试数据中 $\sum n\cdot m \le 4\cdot 10^5$。
每组数据第一行包含两个整数 $n$ 和 $m$($2\le n,m\le 2\cdot 10^5$,$n\cdot m\le 4\cdot 10^5$)——表示行数和列数。
接下来 $n-1$ 行,每行 $m$ 个整数 $w_{i,j}$($-10^9\le w_{i,j}\le 10^9$),表示 $ (i, j) $ 与 $ (i+1, j) $ 之间的街道权值。
接下来 $n$ 行,每行 $m-1$ 个整数 $v_{i,j}$($-10^9\le v_{i,j}\le 10^9$),表示 $ (i, j) $ 与 $ (i, j+1) $ 之间的街道权值。
接下来 $n-1$ 行,每行 $m$ 个字符 $p_{i,j}$($p_{i,j}\in\{\texttt{0},\texttt{1}\}$),若 $p_{i,j}=\texttt{0}$,表示 $ (i, j) $ 与 $ (i+1, j) $ 之间的街道无法重建,反之可以重建。
接下来 $n$ 行,每行 $m-1$ 个字符 $q_{i,j}$($q_{i,j}\in\{\texttt{0},\texttt{1}\}$),若 $q_{i,j}=\texttt{0}$,表示 $ (i, j) $ 与 $ (i, j+1) $ 之间的街道无法重建,反之可以重建。
保证所有测试数据中 $\sum n\cdot m \le 4\cdot 10^5$。
输出格式
对于每组测试数据,输出一个整数,表示所有优美重建方案中的最大美丽度。
输入输出样例
输入 #1
4 3 4 2 3 -2 3 4 9 4 -4 3 4 -2 -9 -5 1 6 -1 -3 1111 1111 111 111 111 2 4 4 23 1 35 6 12 -17 -14 1 -40 0100 000 101 3 3 1 0 1 0 1 0 1 0 0 1 0 0 110 111 10 11 11 3 4 13 7 6 -12 3 -5 12 -6 -3 10 -15 -5 8 -11 10 0 -5 1111 0110 110 101 010
输出 #1
38 0 4 8
第一个测试点的解释见描述部分。
第二个测试点中,只有唯一的优美重建方案:Simons 不重建任何街道,所以最大美丽度为 $0$。
第二个测试点中,只有唯一的优美重建方案:Simons 不重建任何街道,所以最大美丽度为 $0$。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?