#44044. 最长路径
最长路径
暂无测试数据。
小精灵 Ciro 和小恶魔 Cori 都住在同一棵大树上。这是一棵有根树,点的编号 $1$ 到 $n$,其中点 $1$ 是根节点,点 $u$($u\ge2$)的父节点是 $f_u$(不保证 $f_u<u$)。定义两个点之间的距离为两点之间的最短路径上的边数。Cori 每次见到 Ciro 时都会对 Ciro 做一些恶作剧,因此 Ciro 不愿意与 Cori 见面,希望离 Cori 越远越好。
Ciro 最近学会了一个神奇的魔法,能够感知到 Cori 的大致位置,但由于 Ciro 的魔力还不够强,只能感知到 Cori 在以点 $v$ 为根的子树内,但不能感知到 Cori 到底在哪个点上(当然,如果以 $v$ 为根的子树只有 $v$ 这一个点,可以推断出 Cori 的位置也只能在 $v$)。现在 Ciro 在点 $u$,他打算移动到以 $u$ 为根的子树中的某一点来躲避 Cori,使得他们之间的距离尽量大。Ciro 是一个乐观主义者,他想知道最好情况下他们之间的距离的最大值(即从以 $u,v$ 为根的子树中各选一点,使得两点的距离最大,求这个最大值)。Ciro 会进行 $q$ 次询问,每次询问给出 $u,v$,你需要对每一个询问都作出回答。
输入格式
第一行,一个正整数 $n$。
第二行,$n-1$ 个正整数 $f_2,\ldots,f_n$,不保证 $f_u<u$,但保证是一个有根树。
第三行,一个正整数 $q$。
接下来 $q$ 行,每行两个正整数 $u,v$,保证 $1\le u,v\le n$。
输出格式
$q$ 行,每行一个非负整数表示每次询问的答案。
数据范围
对于所有数据,$1\le n,q\le 500000$。
各测试点的详细信息如下表:
# | $n=$ | $q=$ |
---|---|---|
1 | $100$ | $1000$ |
2 | $300$ | $1000$ |
3 | $500$ | $1000$ |
4 | $1000$ | $6000$ |
5 | $3000$ | $6000$ |
6 | $5000$ | $6000$ |
7 | $100000$ | $100000$ |
8 | $300000$ | $300000$ |
9 | $500000$ | $500000$ |
10 | $500000$ | $500000$ |
6
1 1 2 2 4
4
1 1
2 3
1 4
1 5
4
4
4
3