#P17531. PM13206树上蓝点距离

PM13206树上蓝点距离

题目描述

给定一棵有 NN 个节点的带权树,初始所有节点均为白色。接下来需要依次处理 QQ 个操作:

  • 类型 11:给定节点 xx,将节点 xx 染成蓝色。若它已经是蓝色,则状态不变。
  • 类型 22:给定节点 xx,求 xx 到所有蓝色节点的距离之和。

树和全部操作并不会直接输入,而是由以下随机数发生器生成。初始 curValue = startSeed

nextRandom():
    curValue = (curValue * 1999 + 17) mod 1000003
    return curValue

建树过程如下。对 i=0,1,,N2i=0,1,\ldots,N-2

distance[i] = nextRandom() mod maxDist
parent[i] = nextRandom()
if parent[i] < threshold:
    parent[i] = i
else:
    parent[i] = parent[i] mod (i+1)

随后加入一条连接节点 i+1i+1parentiparent_i、长度为 distanceidistance_i 的边。

操作生成方式如下。对 i=0,1,,Q1i=0,1,\ldots,Q-1

queryType[i] = nextRandom() mod 2 + 1
queryNode[i] = nextRandom() mod N

请按顺序执行全部操作,并把所有类型 22 操作的答案进行按位异或,输出最终结果。

输入格式

一行输入五个整数:

N Q startSeed threshold maxDist

输出格式

输出一个整数,表示所有类型 22 查询答案的按位异或值。

数据范围

2N1000002\le N\le1000001Q1000001\le Q\le100000

0startSeed10000020\le startSeed\le10000020threshold10000030\le threshold\le10000031maxDist10000031\le maxDist\le1000003

样例

输入

4 6 15 2 5

输出

7