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

【模板】树上 K 级祖先

背景

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

题目描述

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

有 qq 次询问,第 ii 次询问给定 xi,kix_i, k_i,要求点 xix_i 的 kik_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 个整数 f1…nf_{1\dots n},其中 fif_i 表示 ii 的父亲。特别地,若 fi=0f_i = 0,则 ii 为根。

输出格式

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

6 3 7
5 5 2 2 0 3

1

提示

【样例说明】

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


对于 20%20\% 的数据,n,q≤103n,q \le 10^3。

对于 50%50\% 的数据,n,q≤105n,q \le 10^5。

对于 100%100\% 的数据,2≤n≤5×1052 \le n \le 5 \times 10^5,1≤q≤5×1061 \le q \le 5 \times 10^6,1≤s<2321 \le s < 2^{32}。