#P5053. [COCI 2017/2018 #7] Clickbait

[COCI 2017/2018 #7] Clickbait

题目描述

在上网的时候,Slavko 遇到了一个广告,这个广告上面有一个由容器和管道组成的系统(如图是一个系统的例子)和一行字:“如果往编号为 11 的容器里注水,请确定这些容器被注满水的顺序。” :::align{center} ::: 这个系统包含 KK 个编号为 11 到 KK 的容器,并且我们可以用一个 N×MN\times M 的矩阵来描述它。这些容器的形状为长方形。容器和管道的轮廓将用这些字符表示:

  • 如果字符为 -,那么这个位置是容器或管道的轮廓的水平部分。
  • 如果字符为 |,那么这个位置是容器或管道的轮廓的垂直部分。
  • 如果字符为 +,那么这个位置同时是容器或管道的轮廓的水平和垂直部分。(即容器的四个角或管道的拐弯部分),一个例外是容器与管道的相交部分,在这个位置不使用 +。

在每一个容器内的某个位置内,都存在一个表示这个容器编号的数字串。矩阵内既不是容器和管道的轮廓,又不是表示容器编号的数字串的位置上的字符为 .。

除了编号为 11 的容器以外,所有的容器的顶部都接入了恰好一条可以使水进入容器的管道。编号为 11 的容器的顶部没有管道。

每个容器的侧面可以接入多条(也可以没有)可以使水流出容器的管道。没有两个可以使水流出容器的管道与容器的连接处在同一个高度。

管道必须有方向的连接两个容器,这也就意味着一条管道不能在某些地方分成两条管道,或是两条管道交汇成一条管道,并且没有两条管道会相交。并且管道永远不会向上拐弯,所以可以保证管道里的水可以正常的向下流动并且流入对应接入的容器里。

水只能进入没有被装满水的容器。如果一个容器中的水位达到了可以使水流出的管道的高度,水将会流入这个管道的另一端所接入的容器里,直到那个容器满了为止。

请帮助 Slavko 确定这些容器被注满水的顺序。

请注意:

  • 在矩阵中,每一个字符 + 都有且仅有一个 - 字符在其左边或右边与其相邻,并且有且仅有一个 | 字符在其上边或下边与其相邻。其余的与其相邻的字符将均为 .。
  • 在字符矩阵中,管道与容器轮廓相邻的唯一可能的位置是管道与容器连接的位置。换句话说,除了管道与容器连接的情况,管道不可能与容器相邻。在与容器连接的位置,管道使水流入容器的一端用 | 标识,使水流出容器的一端用 - 标识。

输入格式

第一行,两个整数 N,MN,M(1≤N,M≤10001\le N,M\le1000),表示矩阵的大小。

接下来的 NN 行,每行 MM 个字符,描述了如题目所述的容器系统。

输出格式

你必须输出 KK 行。第 ii 行表示第 ii 个被注满水的容器的编号。输入保证存在唯一解。

12 13
..+--+.......
+-|..|.......
|.|.1|--+....
|.+--+..|....
|......+----+
+---+..|..2.|
....|..+----+
.+--+........
.|...........
+---+........
|.3.|........
+---+........
2
3
1
8 10
..........
.......+-+
...+---|1|
...|...+-+
...|......
..+-+.....
..|2|.....
..+-+.....

2
1

提示

【样例 1 解释】

开始向容器 11 注水。

容器 11 中的水位升高,并且在某个时刻达到通向容器 22 的管道的高度。水流进管道并最终流向容器 22,直到容器 22 装满水为止。

此后,容器 11 中的水位继续升高,直到达到通向容器 33 的管道的高度,水流进管道并最终流向容器 33,直到容器 33 装满水为止。

最后,容器 11 中的水位持续升高,直到容器 11 装满水。

【数据范围】

对于 70%70\% 的数据,满足 N,M≤100N,M\le100。

对于 100%100\% 的数据,满足 N,M≤1000N,M\le1000。