1020: 面向对象程序设计
Description
在面向对象程序设计中,常常会运用到函数的扩展与重写。当一个类继承某个类的时候,它可以调用所有父类可以调用的函数。它可以声明新的函数。当新的函数签名与父类的某个函数一致时,就会发生函数的覆盖(重写)。所以,在子类的实例调用某个函数时,它会调用最近的父类(有可能是它自己)的那个函数实现。
这里我们不考虑访问权限等情况,我们只关心某个类在调用某个函数时,这个函数是在哪个类中实现的。
具体题意请参考样例及其解释。
Input
输入文件名为 design.in。
输入具有如下格式
n
p2 p3 … pn
t1 a11 a12 …
a1t1
t2 a21 a22 …
a2t2
…
tn an1 an2 …
antn
q
u1 r1
u2 r2
…
uq rq
n表示有n个类,这些类从1到n编号
pi表示第i个类的父类编号。1 ≤ pi ≤ i−1。第1个类是所有类共同的祖先类,这个类没有父类
ti表示在第 i 个类中定义了多少个函数,ai1,ai2,…,aiti 表示第 i 个类中的函数列表。同一个类的函数列表中不会出现两个相同的函数
q 表示询问个数
ui,ri 表示第 i 个询问,询问第 ui 个类的实例在调用 ri 函数时,调用的是哪个类中的版本
Output
输出文件名为 design.out。
输出共 q 行,每行输出一个数,表示第i个询问的答案,若不存在,输出-1
Sample Input Copy
5
1 2 3 3
2 2 1
0
2 5 2
2 4 5
1 5
4
3 4
5 2
4 5
1 3
Sample Output Copy
-1
3
4
-1
HINT
【样例解释】
一共有5个类,这5个类构成一颗树,其中1为其根节点。
第2个类的父亲为1号类,第3个类的父亲为2号类,第4/5个类的父亲为3号类。
1号类中有1,2号函数,3号类中有2,5号函数……
第一组询问(3,4)表示询问第3号类里面的4号函数是从哪个类派生来的。从3号类开始向上找,发现并没有4号函数出现,因此输出-1
第二组询问(5,2)表示询问第5号类里面2号函数是从哪个类派生来的,从5号类开始往上找,发现最近的2号出现在3号类中,因此输出3
其它询问略
【数据范围】
对于60%的数据:
2 ≤ n ≤ 103,1
≤ aij ≤ 103,0
≤ ti ≤ 103, ∑ ti ≤ 103,1 ≤ q ≤ 103,1 ≤ ui ≤ n , 1 ≤ ri ≤ 103
对于100%的数据:
2 ≤ n ≤ 105,1
≤ aij ≤ 106,0
≤ ti ≤ 106, ∑ ti ≤ 106,1 ≤ q ≤ 105,1 ≤ ui ≤ n , 1 ≤ ri ≤ 106