CF679C Bear and Square Grid
题目描述
你有一个 $n$ 行 $n$ 列的网格。每个格子要么是空的(用 '.' 表示),要么是被阻塞的(用 'X' 表示)。
如果两个空格子相邻(共用一条边),那么它们是直接连通的。如果存在一条仅经过空格子的路径,每一步都只能走到直接连通的相邻格子,使得从 $(r_1, c_1)$ 到 $(r_2, c_2)$,那么这两个格子是连通的。连通块(连通分量)指的是这样一组空格子,任何两个格子都是连通的,且不存在集合外的空格子与集合内空格子连通。
你的朋友 Limak 是一只大棕熊。他能在一定范围内破坏障碍。具体来说,你可以选择网格中的一个 $k \times k$ 的正方形,Limak 会把该正方形内所有被阻塞的格子('X')都变成空格子('.')。不过,你只能让 Limak 帮忙一次。
选择的正方形必须完全包含在网格中。如果所有格子原本就是空的,Limak 可能不会产生任何改变。
你喜欢大的连通块。请问在让 Limak 帮忙操作后,最大连通块最多有多少个格子?
输入格式
输入的第一行包含两个整数 $n$ 和 $k$($1 \leq k \leq n \leq 500$)——网格的大小以及 Limak 可以操作的范围。
接下来的 $n$ 行,每行有一个长度为 $n$ 的字符串,表示第 $i$ 行的网格。每个字符为 '.' 或 'X',分别表示空格子和被阻塞的格子。
输出格式
输出一个整数,表示在 Limak 帮忙后,网格中最大连通块包含的格子数。
说明/提示
在第一个样例中,你可以选择一个 $2 \times 2$ 的正方形。最优选择是在下图左侧红色框出的区域。此时,将得到包含 $10$ 个格子的连通块,在下图右侧以蓝色标出。

由 ChatGPT 5 翻译