QOJ.ac

QOJ

実行時間制限: 2.0 s メモリ制限: 1024 MB 満点: 100 ハック可能 ✓

#17855. 交叉连接

統計

光的流动开始漂移分离,作为回应,人们建造了桥梁来跨越不断扩大的距离。 为了重新统一破碎的岛屿,他们建造了从岛屿中心延伸到最边缘的结构。 旨在完成这次重新连接的最终结构被称为 Crosslink(交叉链接)——但这座桥梁从未完工。 沿着他们曾经试图团结的破碎流光的遗迹,修复那座未完成的桥梁。


在岛上,有一个大小为 $N \times M$ 的网格。从上数第 $r$ 行、从左数第 $c$ 列的单元格记为 $(r, c)$。

在 $N \times M$ 个单元格中,有一些已经包含陆地。人们希望添加更多的陆地以形成一个 crosslink——这是一个由陆地单元格组成的连通区域,且该区域触及网格的所有四个边界:上、下、左、右。

正式地,如果一个网格单元格集合 $S$ 满足以下条件,则被称为一个 crosslink:

  • 每个单元格 $(r, c) \in S$ 都包含陆地。
  • 对于 $S$ 中的任意两个不同的单元格 $a, b \in S$,存在一条路径 $a = p_1 \to p_2 \to \dots \to p_k = b$,满足 $\{p_1, p_2, \dots, p_k\} \subset S$,且 $p_i$ 和 $p_{i+1}$ 在上、下、左、右方向上相邻($1 \le i \le k - 1$)。
  • 存在一个整数 $c$($1 \le c \le M$)使得 $(1, c) \in S$。
  • 存在一个整数 $c$($1 \le c \le M$)使得 $(N, c) \in S$。
  • 存在一个整数 $r$($1 \le r \le N$)使得 $(r, 1) \in S$。
  • 存在一个整数 $r$($1 \le r \le N$)使得 $(r, M) \in S$。

下图展示了一个包含有效 crosslink 的网格示例。阴影单元格表示陆地,而未阴影单元格表示空格。如第三个示例所示,并非所有陆地单元格都需要是 crosslink 的一部分。

接下来的三个网格不包含 crosslink。例如,在第三个网格中,不存在一个既能到达左边界又能到达右边界的起点,因此它不包含 crosslink。

在不同位置放置新陆地的代价可能有所不同。考虑以下示例:

在最左边的图像中,黑色单元格表示现有的陆地,而未阴影单元格中的数字表示在这些位置放置新陆地的代价。

通过添加红色所示的陆地,可以形成一个 crosslink,总代价为 $4 + 4 = 8$。然而,如黄色所示放置陆地可以形成一个有效的 crosslink,且总代价更低,为 $1 + 2 + 1 + 2 + 1 = 7$,这是本例中的最小代价。另一方面,如绿色所示放置陆地仅需代价 $4 + 2 = 6$,但由于它不包含 crosslink,因此不是一个有效的解。

岛民们希望找到放置陆地并形成有效 crosslink 所需的最小总代价。

输入格式

第一行包含两个整数 $N, M$,表示网格的大小。

接下来的 $N$ 行,每行包含字符 $C_{i,1}, C_{i,2}, \dots, C_{i,M}$,表示网格的状态。字符的含义如下:

  • 如果 $C_{i,j}$ 为 0,则单元格 $(i, j)$ 已经包含陆地。
  • 如果 $C_{i,j}$ 是 19 的数字,则单元格 $(i, j)$ 为空,且在此处放置陆地的代价为对应的数字。
  • 如果 $C_{i,j}$ 是大写字母 AZ 之一,则单元格 $(i, j)$ 为空,且在此处放置陆地的代价分别为 $10, 11, \dots, 35$。

输出格式

输出创建 crosslink 所需放置陆地的最小总代价。

数据范围

  • $2 \le N \le 1000$
  • $2 \le M \le 1000$
  • $C_{i,j}$ 为数字或大写字母($1 \le i \le N, 1 \le j \le M$)

子任务

  • 子任务 1(8 分):$N \le 4, M \le 4$
  • 子任务 2(3 分):$C_{i,j} = \text{'1'}$($1 \le i \le N, 1 \le j \le M$)
  • 子任务 3(11 分):对于偶数 $i$,$C_{i,j} = \text{'0'}$($1 \le i \le N, 1 \le j \le M$)
  • 子任务 4(42 分):$N \le 100, M \le 100$
  • 子任务 5(18 分):$N \le 700, M \le 700$
  • 子任务 6(18 分):无附加限制。

样例

输入样例 1

5 5
00280
20358
10901
24400
12105

输出样例 1

7

输入样例 2

5 7
QTVPU0Z
02X010Y
Y0R2T0X
Z301Y40
W0PUXVZ

输出样例 2

13

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.