#P507. 敲击砖块

敲击砖块

题目描述

牛哥有 n×mn×m 个砖块排布成 nnmm 列的矩阵,我们使用 (i,j)表示矩阵中从上往下数第 ii 行和从左往右数第 jj 列的砖块。如下左图就是一个 6666 列的矩阵。有的砖块能被敲碎,为了便于辨认,我们使用灰色绘制它们;有的砖块不能被敲碎,我们使用蓝色斜线绘制它们。如下右图所示,第 33 行第 22 列的砖块 (33,22) 是灰色的,能被敲碎,使用一个叉代表其被敲碎了。 image.png

对于使用蓝色斜线绘制的砖块,它们是一体的,牛可乐定义“蓝色极大连通块”为最大化上下左右(即四连通)连接的蓝色砖块个数、且不包含灰色砖块的连通块,例如,在上图中,唯一的“蓝色极大连通块”包含 44 个蓝色砖块,分别为 (33,33),(33,44),(44,33),(44,44)。 与真实生活一样,如果一个“蓝色极大连通块”的任意一个砖块都不与灰色砖块存在共边,则认为这个“蓝色极大连通块”完好地从原砖块掉落。例如,在上图中,要使得“蓝色极大连通块”掉落,至少需要敲碎八块砖块,如下图所示 ​image.png

特别地,对于位于边界上的“蓝色极大连通块”,不需要关注悬空的那些。例如,在下左图中,唯一的“蓝色极大连通块”包含 22 个蓝色砖块,分别为 (11,11),(11,22),其位于边界上,要使得它掉落,至少需要敲碎 33 块砖块,如下图所示。 image.png 现在,对于牛可乐给你的砖块矩阵,你需要帮助他分离出任意一块“蓝色极大连通块”,计算最少需要敲碎的灰色砖块个数

输入格式

第一行输入两个正整数n,m (1<=n1<=n,m<=500500)代表砖块矩阵的行数和列数。 接下来 nn 行,第 ii 行输入一个长度为 mm、仅有字符'00'和'11'组成的字符串s~i,11~s~i,22~...s~i,m~,其中s~ij~='00' 代表(i,j)是灰色砖块s~ij~='11'代表(i,j)是蓝色砖块

输出格式

输出一个整数,代表最少需要敲碎的灰色砖块个数。

样例 1

样例输入 1

6 6
000000
000000
001100
001100
000000
000000

样例输出 1

8

样例 2

样例输入 2

2 3
110
000

样例输出 2

3

样例 3

样例输入 3

2 2
11
11

样例输出 3

0

样例 4

样例输入 4

4 5
10000
00111
11000
00000

样例输出 4

2

样例 5

样例输入 5

3 3
111
101
111

样例输出 5

1