#P1415. Map of Ninja House

    ID: 416 传统题 1000ms 256MiB 尝试: 3 已通过: 1 难度: 10 上传者: 标签>搜索DFS图结构欧拉回路Japan 2002 Kanazawa

Map of Ninja House

描述
一份古老的文件记载,金泽市的忍者屋实际上是一座防御堡垒,设计得像迷宫一样。其房间通过隐藏的门以复杂的方式相连,任何入侵者都会迷失方向。每个房间至少有两扇门。

忍者屋可以用图来建模,如图1所示。圆圈代表房间,连接两个圆的线代表两房间之间的门。
我决定绘制一张地图,因为当时没有可用的地图。你的任务是根据我的探索记录帮助我绘制地图。

我从一个对外开放的入口开始探索。我所走的路径在图2中用带箭头的线示意性地表示。移动规则如下:

进入一个房间后,我首先打开最右边的门并移动到下一个房间。但如果下一个房间已经被访问过,我会关闭这扇门而不进入,然后打开下一个最右边的门,依此类推。当我检查完一个房间的所有门后,我会通过进入该房间的门返回。

我随身携带一个计数器来记录与第一个房间的距离。计数器的值在进入新房间时增加,返回时减少。在图2中,括号中的数字表示进入房间时的计数器值,即与第一个房间的距离。而不带括号的数字表示访问的顺序。

我记录了探索过程。每次打开一扇门时,根据以下规则记录一个数字:

  1. 如果门的另一侧是一个新房间,我记录该房间的门数,这是一个正数。
  2. 如果是一个已访问的房间RR,我记录RR与第一个房间的距离减去当前房间与第一个房间的距离,这是一个负数。

在图2的示例中,第一个房间有三扇门连接其他房间,因此我最初记录33。然后当我移动到第二、第三和第四个房间时,它们都有三扇门,我将3 3 33\ 3\ 3追加到记录中。当我跳过从第四个房间到第一个房间的入口时,距离差3-3会被追加,依此类推。因此,当我完成探索时,记录是一个数字序列3 3 3 3 3 3 2 5 3 2 5 33\ 3\ 3\ 3\ -3\ 3\ 2\ -5\ 3\ 2\ -5\ -3

金泽市有几十座忍者屋。对于每个忍者屋的给定数字序列,你需要绘制其对应的图。

输入
输入的第一行是一个整数nn,表示我探索过的忍者屋的记录数量。可以假设nn小于100100。接下来的nn条记录是每次探索记录的数字序列,以00作为结束符。每条记录由一行或多行组成,每行长度小于10001000字符。每个数字由空格或换行符分隔。可以假设每个忍者屋的房间数小于100100,每个房间的门数小于100100

输出
对于每个有mm个房间的忍者屋,输出应包含mm行。每mm行中的第ii行应如下所示:

ii r(1)r(1) r(2)r(2) ... r(ki)r(k_i),

其中r(1)r(1),...,r(ki)r(k_i)是与房间ii相邻的房间,kik_i是房间ii的门数。数字之间用一个空格分隔。房间按访问顺序从11开始编号。r(1)r(1),r(2)r(2),...,r(ki)r(k_i)应按升序排列。注意,房间ii可能通过多扇门连接到另一个房间。在这种情况下,该房间编号应在r(1)r(1),...,r(ki)r(k_i)中出现多次。

输入数据 1
22
3 3 3 3 3 3 2 5 3 2 5 3 03\ 3\ 3\ 3\ -3\ 3\ 2\ -5\ 3\ 2\ -5\ -3\ 0
3 5 4 2 4 3 2 2 1 03\ 5\ 4\ -2\ 4\ -3\ -2\ -2\ -1\ 0

输出数据 1
1 2 4 61\ 2\ 4\ 6
2 1 3 82\ 1\ 3\ 8
3 2 4 73\ 2\ 4\ 7
4 1 3 54\ 1\ 3\ 5
5 4 6 75\ 4\ 6\ 7
6 1 56\ 1\ 5
7 3 5 87\ 3\ 5\ 8
8 2 78\ 2\ 7
1 2 3 41\ 2\ 3\ 4
2 1 3 3 4 42\ 1\ 3\ 3\ 4\ 4
3 1 2 2 43\ 1\ 2\ 2\ 4
4 1 2 2 34\ 1\ 2\ 2\ 3

来源
Japan 2002 Kanazawa