#P2056. The Separator in Grid
The Separator in Grid
描述
给定一个连通的无向图 ,其中 是顶点集,表示一组节点, 是边集,每条边连接 中的两个节点。如果顶点子集 的移除使得剩余的图有两个连通分量,则称 为一个分隔符。我们用 来表示这个划分,其中移除分隔符 后,剩余的图有两个连通分量 和 。
在这个问题中,我们考虑网格中的分隔符。网格中的每个节点都与它的八个邻居(如果存在)相连。在图1中,我们展示了6x6网格的一个划分,其中有一个9点分隔符(图中的灰色节点)。分隔符左侧的节点属于集合 (白色节点),右侧的节点属于集合 (黑色节点)。
为了简化问题,你可以假设这个问题中提到的所有分隔符都满足以下限制:
-
它是一个最小分隔符。如果一个分隔符的任何子集都不是分隔符,则称这个分隔符是最小的。
-
它从网格的顶行的一个节点开始(除了角落,即图中的30和35),并在网格的底行的一个节点结束(除了角落,即图中的0和5)。
-
在从顶部到底部的路径上,它可以向左、向右或向下移动,但不能向上移动。
现在我们描述了一种方法来改进网格上的给定划分,通过这种方法我们可以减少分隔符中的节点数量。这个方法包含两个步骤:
-
从 中选择一些节点并添加到 中。任何被选择的节点都必须有一个左邻居在 中。
-
从 中移除一些节点(不包括前一步中添加的节点),并将它们添加到 中。
在改进之后,我们应确保 仍然是一个分隔符,并使 中的节点数量尽可能少。对于图1,我们应该将14和20添加到 中,并从 中移除7、13、19和25。之后,我们得到一个新的划分,其分隔符包含7个点,如图2所示。
你的任务是,给定网格上的一个划分,确定改进后分隔符中节点的最少数量。
输入
有多个测试用例。每个用例以一行包含两个整数 和 ()开始。在接下来的 行中,每行有 个字符,描述了 网格的初始划分。每个字符是 'S'、'W' 或 'B'。已知每个行中至少包含一个 'S'、一个 'W' 和一个 'B',且 'W' 总是位于 'S' 的左侧。
一个测试用例 和 表示输入结束,不应被处理。
输出
对于每个测试用例,你应该输出一行,包含一个整数,表示改进后分隔符中节点的最少数量。
输入数据 1
6 6
WWSBBB
WSSBBB
WSBBBB
WSBBBB
WSSSBB
WWWSBB
0 0
输出数据 1
7
来源
北京2004