CF1495C Garden of the Sun
题目描述
在太阳之园里有许多向日葵。
太阳之园是一个有 $n$ 行 $m$ 列的矩形网格,每个格子都是农田。所有格子上都种有一株向日葵。不幸的是,有一天夜里,闪电击中了若干(可能为零)个格子,这些格子上的向日葵被烧成了灰烬。换句话说,被闪电击中的格子变成了空地。神奇的是,任意两个空地格子之间没有公共点(既没有公共边,也没有公共角)。
现在,园主希望移除一些(可能为零)株向日葵,使得满足以下两个目标:
- 当你站在一个空地格子上时,你可以走到任意其他空地格子。换句话说,这些空地格子是连通的。
- 任意两个空地格子之间恰好只有一条简单路径。换句话说,空地格子之间没有环。
你只能从一个空地格子走到与其有公共边的另一个空地格子。
请你帮助园主给出一种满足所有要求的方案。
注意,你不能重新种植向日葵。你不需要最小化移除的向日葵数量。可以证明,答案总是存在。
输入格式
输入包含多组测试数据。第一行包含一个整数 $t$($1\le t\le 10^4$),表示测试数据组数。每组测试数据描述如下:
第一行包含两个整数 $n$、$m$($1 \le n,m \le 500$),表示行数和列数。
接下来的 $n$ 行,每行包含 $m$ 个字符。每个字符为 'X' 或 '.',分别表示空地格子和种有向日葵的格子。
保证所有测试数据中 $n \cdot m$ 的总和不超过 $250\,000$。
输出格式
对于每组测试数据,输出 $n$ 行,每行包含 $m$ 个字符,表示一行农田。每个字符应为 'X' 或 '.',分别表示空地格子和种有向日葵的格子。
如果有多种方案,输出任意一种均可。可以证明,答案总是存在。
说明/提示
我们用 $(x,y)$ 表示第 $x$ 行第 $y$ 列的格子。
下图中,白色、黄色和蓝色格子分别表示种有向日葵的格子、被闪电击中的格子和被移除向日葵的格子。

在第一个测试用例中,一种可行的方案是移除 $(1,2)$、$(2,3)$ 和 $(3,2)$ 上的向日葵。

另一种可行的方案是移除 $(1,2)$、$(2,2)$ 和 $(3,2)$ 上的向日葵。

下图的输出是错误的,因为任意一对格子之间存在两条简单路径(存在环)。例如,从 $(1,1)$ 到 $(3,3)$ 有两条简单路径:
1. $(1,1)\to (1,2)\to (1,3)\to (2,3)\to (3,3)$
2. $(1,1)\to (2,1)\to (3,1)\to (3,2)\to (3,3)$

下图的输出也是错误的,因为无法从 $(1,1)$ 走到 $(3,3)$。
由 ChatGPT 4.1 翻译