#z1002. 祖先
祖先
Background
Description
小A 拿到了一张系谱图。所谓系谱图,就是表明了 一个或多 个家族间祖先 子孙关系的树形图。 设系谱图中有n 个结点,代表着有 n 个人。每个人有唯一的父亲 (也可能没有 ),因此这张系谱图形成了一 个森林 。定义一个人的 k 祖先” 为这个人的向上第 k 代祖先 (其中父亲称为第 1 代,父亲的父亲称为第 2 代,以此类推)。小 A 想知道,某个人的 k 祖先是谁? 小B 觉得小 A 的问题太简单了,随手写了个 LCA 就秒掉了,于是他改了改题目,他想知道,某个人是多少个人的 k 祖先? 小A 觉得小 B 这个问题还不够难,随手写了个树形 dp 就秒掉了。他觉得这样 出题不大行,于是他将每个人的名字告诉了你。他想知道,某个人是多少个不同名字的人的 k 祖先? 当然,你需要支持多次询问。 简化版题意: 给出一张带名字的 n 个点的系谱图, q 次询问, 每次询问求 某 个人是多少个不同名字的人的 k 祖先?
Format
Input
输入文件名为 color .in 。 第一行,一个数 n ,表示系谱图的结点数或人数。 接下来 n 行,每行一个字符串 𝑆𝑖 和一个数 𝑝𝑎𝑟𝑖 ,表示第 i 个人的名字为 𝑆𝑖 ,他的父亲为 𝑝𝑎𝑟𝑖,当 𝑝𝑎𝑟𝑖=0 时表示其为系谱图 中的一个 根节点(即系谱图中没有记录该结点的父亲,在之后的计算中当作该结点无任何祖先即可) 。 接下来一行,一个数 q ,表示询问的次数。 接下来 q 行,每行两个数 x 和 k ,表示一个询问:第 x 个人是多少个不同名字的人的k 祖先。
Output
输出文件名为color .out 。 输出共q 行,第 i 行回答第 i 个询问,每行仅一个数,表示 第 x 个人是多少个不同名字的人的 k 祖先。
Samples
5
alice 0
alice 1
bob 2
cindy 1
bob 2
3
2 1
1 2
1 1
1
1
2
Limitation
相关
在下列比赛中: