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$ 列的格子。 下图中,白色、黄色和蓝色格子分别表示种有向日葵的格子、被闪电击中的格子和被移除向日葵的格子。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1495C/6c1f0eba6baaa11b758e7cc9933abfde3f83e428.png) 在第一个测试用例中,一种可行的方案是移除 $(1,2)$、$(2,3)$ 和 $(3,2)$ 上的向日葵。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1495C/a0b70183d96ea9c228c083ab93b05f1533fd6a98.png) 另一种可行的方案是移除 $(1,2)$、$(2,2)$ 和 $(3,2)$ 上的向日葵。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1495C/280c704460a9e38f47a86fc4285daa49bfbd1f1d.png) 下图的输出是错误的,因为任意一对格子之间存在两条简单路径(存在环)。例如,从 $(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)$ ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1495C/b70e5f707d67e6ea976951ebead8241851d9d621.png) 下图的输出也是错误的,因为无法从 $(1,1)$ 走到 $(3,3)$。 由 ChatGPT 4.1 翻译