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$ 个格子的连通块,在下图右侧以蓝色标出。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF679C/73f9f2e0fd56d2fb7f7f3062a32953f02d9af103.png) 由 ChatGPT 5 翻译