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
Hyacine Studio