CF1534F1 Falling Sand (Easy Version)

题目描述

这是该问题的简单版本。不同版本的区别在于 $a_i$ 的约束条件。只有在所有版本都被解决的情况下,你才能进行 Hack。 小 Dormi 最近收到了朋友送给他的一道谜题,现在需要你的帮助来解决它。 这个谜题由一个竖直的棋盘组成,棋盘有 $n$ 行 $m$ 列,每个格子要么为空,要么被沙块填满,并且有 $m$ 个非负整数 $a_1,a_2,\ldots,a_m$($0 \leq a_i \leq n$)。在本题版本中,$a_i$ 等于第 $i$ 列中沙块的数量。 当某个被沙块填满的格子被扰动时,该沙块会从其所在的格子掉落到该列底部的沙子计数器中(每一列都有一个沙子计数器)。在沙块下落的过程中,任何与下落沙块相邻的其它沙块也会被扰动并开始下落。具体来说,位于 $(i,j)$ 的被扰动沙块会穿过该列中 $(i,j)$ 及其以下的所有格子,并在下落过程中扰动所有相邻的格子。这里,相邻格子指的是 $(i-1,j)$、$(i,j-1)$、$(i+1,j)$ 和 $(i,j+1)$(如果它们在棋盘范围内)。注意,新下落的沙块也可以扰动其它沙块。 每次操作你可以扰动任意一个沙块。当每一列的沙子计数器中至少有 $a_i$ 个沙块时,谜题就被解决了。 现在你的任务是找出解决谜题所需的最少操作次数。注意,小 Dormi 永远不会给你一个无解的谜题。

输入格式

第一行包含两个用空格分隔的正整数 $n$ 和 $m$($1 \leq n \cdot m \leq 400\,000$)。 接下来的 $n$ 行,每行包含 $m$ 个字符,描述棋盘的每一行。如果某个字符为 '.',则对应格子为空;如果为 '\#',则该格子中有一个沙块。 最后一行包含 $m$ 个非负整数 $a_1,a_2,\ldots,a_m$($0 \leq a_i \leq n$),表示每一列下方计数器中需要掉落的最少沙块数量。在本题版本中,$a_i$ 等于第 $i$ 列中沙块的数量。

输出格式

输出一个非负整数,表示解决谜题所需的最少操作次数。

说明/提示

例如样例 $1$,通过扰动第一行最左边第一列和第六列的两个沙块,以及第二行第四列的沙块,可以使所有所需数量的沙块掉落到每一列的计数器中。可以证明,少于 $3$ 次操作无法完成,因此答案是 $3$。下面是第一个样例的谜题示意图。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1534F1/3a2f28320c431f7fc4be328a7626876c2ea55199.png) 例如样例 $2$,只需扰动第一行最右边一列的格子,就能使棋盘上所有沙块都掉落到底部的计数器中。因此答案是 $1$。下面是第二个样例的谜题示意图。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1534F1/a5e473b6fa07dabecf94f6cfb85782199edfaea0.png) 由 ChatGPT 4.1 翻译