#P16192. [Ncpc2017]Fractal Tree分形树
[Ncpc2017]Fractal Tree分形树
题目描述
定义一系列分形树 。首先给出一棵至少包含 个点的有根树 。
对于 , 由 递归构造而来:找到 中所有叶子组成的集合 。对每个叶子 ,用一份 的拷贝替换它,并让 对应于这份 拷贝的根。
现在给定 ,考虑树 。对 做一次深度优先搜索:在一个点处,先递归访问最左儿子的子树,再访问第二个最左儿子的子树,依此类推。按照 DFS 首次访问点的顺序,从 开始给所有点标号。
给出若干对顶点标号,请求出它们在 中的距离。距离定义为两点之间简单路径上的边数。
图示

输入格式
首先给出树 。
第一行包含一个整数 ,表示 的顶点数,满足 。顶点编号为 到 ,其中 是根。
第二行包含 个整数 。对每个 , 表示顶点 在 中的父亲。保证 。在树中,儿子从左到右的顺序与编号从小到大的顺序一致,也就是说编号最小的儿子最靠左。
第三行包含整数 ,满足 。
第四行包含整数 ,表示询问数量,满足 。
接下来 行,每行包含两个不同整数 ,表示 中两个点的 DFS 标号。保证 都是合法标号,且均不超过 。
输出格式
对每个询问 ,按输入顺序输出一行,表示 中标号为 和 的两个点之间的距离。
输入输出样例 #1
输入 #1
4
0 1 0
1
10
1 2
1 4
1 6
1 8
1 10
5 10
6 8
9 3
7 10
8 9
输出 #1
1
3
3
2
2
6
5
5
1
1