Hyacine Studio

P1000 师门

L10
中 自编题字典递归

实验室的师承关系是一棵树:每个人最多一个导师,导师的导师……一直往上,最后都挂在虚拟根 ROOT 下。

输入

第一行两个整数 n q。

接下来 n 行,每行 name advisor,表示 name 的导师是 advisor。advisor 为 ROOT 表示此人直接挂在根下。导师可能在这行之后才出现,输入不保证父亲先出现。

再接下来 q 行,每行一个操作。

操作

操作 含义
DEPTH name 到 ROOT 的边数,ROOT 为 0
LINEAGE name 输出从 ROOT 到该人的路径,用 / 连接
SIZE name 子树中的人数(含本人,不含 ROOT;SIZE ROOT 返回 n)
COMMON a b a 和 b 的最近公共祖先
PRINT name 打印 name 的子树,不打印 name 自己;直接孩子按名字升序,每深一层多缩进两个空格;叶子节点无输出

任何操作里名字不存在,输出 ERROR。PRINT 可能输出多行,也可能一行都不输出。

输出

每个操作按顺序输出结果。PRINT 的每一行只输出名字和缩进,行末不要有空格。

约束

  • 0 ≤ n, q ≤ 2000
  • 名字只含小写字母、数字、下划线,长度 ≤ 20,首字符为小写字母;ROOT 保留
  • 保证无重名、无环,最终是一棵以 ROOT 为根的树
  • 树高可能达到 n,递归深度 2000 会超过 Python 默认的 1000,注意处理

样例见题目下方。

样例

样例 1
输入
5 8
alice ROOT
bob alice
carol alice
dave bob
erin bob
DEPTH dave
LINEAGE dave
SIZE alice
COMMON dave erin
COMMON carol dave
PRINT alice
PRINT dave
DEPTH nobody
输出
3
ROOT/alice/bob/dave
5
bob
alice
bob
  dave
  erin
carol
ERROR
样例 2
输入
0 5
SIZE ROOT
DEPTH ROOT
LINEAGE ROOT
PRINT ROOT
COMMON ROOT ROOT
输出
0
0
ROOT
ROOT

提交代码

公网模式下只有管理员能提交判题,避免陌生人在本机执行代码。 登录