CF616C The Labyrinth
题目描述
给定一个由 $ n\times m $ 个单元格组成的矩形区域。每个单元格要么是空的,要么是不可通行的(包含一个障碍物)。空单元格用 `.` 标记,不可通行的单元格用 `*` 标记。如果两个空单元格共用一条边,则称它们为相邻单元格。
我们将一个非可扩展的单元格集合称为连通分量,其中任意两个单元格都可以通过相邻单元格的路径相连。这是连通分量的一个典型且众所周知的定义。
对于每个不可通行的单元格 $ (x,y) $,假设它是一个空单元格(所有其他单元格保持不变),并计算包含 $ (x,y) $ 的连通分量的大小(单元格数量)。你应该对每个不可通行的单元格分别进行上述操作。
答案应以 $ n $ 行和 $ m $ 列的矩阵形式输出。如果单元格开头为空,则第 $i$ 行的第 $j$ 个符号应为`.`;否则,第 $i$ 行的第 $j$ 个符号应包含唯一的数字——答案 $\bmod\ 10$。矩阵打印时应不带任何空格。
为了加快输出速度,建议将输出构建为长度为 $m$ 的 $n$ 个字符串数组,并将其按行序列打印。
**本题读入/输出量较大,建议使用较快的读入/输出方式。**
输入格式
第一行包含两个整数 $n,m$,表示矩阵的行数和列数。
接下来 $n$ 行,每行 $m$ 个字符。`.`表示空单元格,`*` 表示不可通行的单元格。
输出格式
共 $n$ 行 $m$ 列,表示答案矩阵。
如果原位置是 `.`,则输出 `.`。否则输出这个单元格的答案。
说明/提示
在第一个示例中,如果我们假设中心单元格为空,则它将包含在大小为 $5$ 的连通分量中(十字形)。如果任何一个角落的单元格为空,则它将被包含在大小为 $3$ 的连通分量中(角落)。