CF152E Garden
题目描述
Vasya 有一个非常美丽的乡村花园,这个花园可以表示为一个 $n \times m$ 的矩形地块,被分成 $n \cdot m$ 个小方格。在某个美丽的日子里,Vasya 突然想起,他需要在 $k$ 个重要方格(这些方格里有建筑物)之间铺设道路。为了铺设道路,他可以用混凝土覆盖花园中的部分方格。
我们知道每个花园方格中有 $a_{i,j}$ 朵花,表示在坐标为 $(i, j)$ 的方格上生长着多少朵花。当某个方格被混凝土覆盖后,这个方格上的所有花都会死亡。
Vasya 想要按如下条件用混凝土覆盖一些方格:
- 所有 $k$ 个重要方格必须被混凝土覆盖;
- 任意两个重要方格之间必须可以通过仅走被混凝土覆盖的相邻方格(即有公共边的方格)连通;
- 死亡的花的总数应尽可能少。
由于 Vasya 的花园比较大,他希望你帮他完成这个任务。
输入格式
第一行输入三个整数 $n$,$m$ 和 $k$($1 \leq n, m \leq 100$,$n \cdot m \leq 200$,$1 \leq k \leq \min(n \cdot m, 7)$),分别表示花园的大小以及重要方格的数目。接下来的 $n$ 行,每行 $m$ 个数字 $a_{i,j}$($1 \leq a_{i,j} \leq 1000$),表示每个方格里的花的数量。之后再输入 $k$ 行,每行两个整数 $x$ 和 $y$($1 \leq x \leq n$,$1 \leq y \leq m$),表示一个重要方格的坐标。保证所有 $k$ 个重要方格的位置各不相同。
输出格式
第一行输出一个整数,表示在修路过程中死亡的最少花的数目。接下来输出 $n$ 行,每行 $m$ 个字符,表示花园的方案。用大写 'X' 表示被混凝土覆盖的方格,用点 '.' 表示没有被覆盖的方格。如果有多种方案,输出其中任意一种即可。
说明/提示
由 ChatGPT 5 翻译