luogu#P11513. [ROIR 2017] 培训 (Day 2)

[ROIR 2017] 培训 (Day 2)

题目背景

翻译自 ROIR 2017 D2T4

题目描述

某公司共有 nn 名员工,每个员工都有一个唯一的编号,编号从 11nn。编号为 11 的员工是公司总经理,除了总经理之外,每个员工都有一个直接上级,员工 ii 的直接上级编号为 pip_i,且有 pi<ip_i < i

px=yp_x = y,则员工 xx 被称为员工 yy 的第 11 层下属;若员工 pxp_x 是员工 yy 的第 k1k-1 层下属,则员工 xx 被称为员工 yy 的第 kk 层下属。

现在,公司总经理可以选择一些员工参加培训。他决定选择两个数字 LLRR,将所有编号满足 LiRL \leq i \leq R 的员工送去培训。

在确定 LLRR 之前,总经理收到了 mm 条员工的要求,第 jj 条要求用两个数字 uju_jkjk_j 表示,这代表员工 uju_j 希望其第 kjk_j 层下属中至少有一个被送去培训。为了节省费用,总经理希望确定 LLRR 的值使得送去培训的员工人数最少,并且所有员工的要求都能满足。

需要编写程序,根据公司内部的上下级关系和员工的要求,找出一对 LLRR,使得所有要求都能得到满足,并且送去培训的员工人数最少。如果有多个满足条件的 (L,R)(L, R) 对,选择其中 LL 最小的那个。

输入格式

第一行输入一个整数 nn,表示公司员工的总数(2n2000002 \leq n \leq 200000)。

第二行输入 n1n-1 个整数 p2,p3,,pnp_2, p_3, \dots, p_n,其中 pip_i 表示员工 ii 的直接上级编号,且 1pi<i1 \leq p_i < i

第三行输入一个整数 mm,表示员工的要求数量。

接下来 mm 行,每行包含两个整数 uju_jkjk_j,表示第 jj 条要求。

输出格式

输出两个整数 LLRR,表示选择的员工编号区间。如果存在多个符合条件的 (L,R)(L, R) 对,输出其中 LL 最小的那一对。

7
1 1 2 2 3 3
3
1 1
3 1
1 2
3 6

提示

样例解释

员工编号为 3,4,5,63,4,5,6 的员工将被送去培训。这满足所有要求,因为员工 33 是员工 11 的第 11 层下属,员工 44 是员工 11 的第 22 层下属,员工 66 是员工 33 的第 11 层下属。

数据范围

子任务 分值 2n2\le n\le 1m1\le m\le 其它特殊性质
11 1919 5050
22 2525 30003000
33 2121 200000200000 pi=i1p_i=i-1
44 3535