题目描述
给定一棵 n 个结点的有根树 T,结点从 1 开始编号,根结点为 1 号结点,每个结点有一个正整数权值 vi。
有 Q 次询问,对于一次询问,给定 (x,k),设 x 号结点的子树内(包含 x 自身)的所有满足距离 x 号结点不超过 k 的结点编号为 c1,c2,...,ck,则这次询问的答案为:
(vc1⊕d(c1,x))+(vc2⊕d(c2,x))+⋯+(vck⊕d(ck,x))其中 d(x,y) 表示树上 x 号结点与 y 号结点间唯一简单路径所包含的边数,d(x,x)=0。⊕ 表示异或运算。
输入格式
第一行一个整数 n 表示树的大小。
第二行 n 个整数表示 vi。
第三行 n−1 个整数,依次表示 2 号结点到 n 号结点,每个结点的父亲编号 pi。
第四行一个整数 Q。
接下来 Q 行,每行两个整数 x,k,表示一个 (x,k) 的查询。
输出格式
输出共 Q 行,第 i 行一个整数表示第 i 次询问的答案。
提示
对于 10% 的数据,满足 n,Q≤2×103。
对于 20% 的数据,满足 n,Q≤105。
对于另外 20% 的数据,满足 pi=i−1。
对于另外 10% 的数据,满足 k≤20。
对于另外 20% 的数据,满足 k=n。
对于另外 10% 的数据,满足 vi=0。
对于 100% 的数据,满足 1≤n,Q≤106,0≤v≤109,1≤pi<i,1≤x,k≤n。