#P5903. 【模板】树上 K 级祖先

【模板】树上 K 级祖先

题目背景

本题仅作为长链剖分求树上 kk 级祖先评测用,不保证卡掉了其他复杂度不正确的做法。

题目描述

给定一棵 nn 个点的有根树。

qq 次询问,第 ii 次询问给定 xi,kix_i, k_i,要求点 xix_ikik_i 级祖先,答案为 ansians_i。特别地,ans0=0ans_0 = 0

本题中的询问将在程序内生成。

给定一个随机种子 ss 和一个随机函数 get(x)\operatorname{get}(x)

#define ui unsigned int
ui s;

inline ui get(ui x) {
	x ^= x << 13;
	x ^= x >> 17;
	x ^= x << 5;
	return s = x; 
}

你需要按顺序依次生成询问。

did_i 为点 ii 的深度,其中根的深度为 11

对于第 ii 次询问,$x_i = ((\operatorname{get}(s) \operatorname{xor} ans_{i-1}) \bmod n) + 1$,$k_i = (\operatorname{get}(s) \operatorname{xor} ans_{i-1}) \bmod d_{x_i}$。

输入格式

第一行三个整数 n,q,sn, q, s

第二行 nn 个整数 f1nf_{1\dots n},其中 fif_i 表示 ii 的父亲。特别地,若 fi=0f_i = 0,则 ii 为根。

输出格式

一行一个整数,表示 xori=1qi×ansi\operatorname{xor}_{i=1}^q i \times ans_i

6 3 7
5 5 2 2 0 3
1

提示

【样例说明】

x1=4x_1 = 4k1=1k_1 = 1ans1=2ans_1 = 2
x2=6x_2 = 6k2=3k_2 = 3ans2=5ans_2 = 5
x3=3x_3 = 3k3=0k_3 = 0ans3=3ans_3 = 3
故输出 11


对于 20%20\% 的数据,n,q103n,q \le 10^3

对于 50%50\% 的数据,n,q105n,q \le 10^5

对于 100%100\% 的数据,2n5×1052 \le n \le 5 \times 10^51q5×1061 \le q \le 5 \times 10^61s<2321 \le s < 2^{32}