#P16707. 树题

树题

题目描述

小 T 有一棵包含 nn 个点的树,第 ii 个点的权值为 aia_i

小 T 维护一个集合 SS。每当他向 SS 中加入一个整数 xx 时,会依次执行以下操作:

  1. SS 中所有大于等于 xx 的数都加 11
  2. xx 加入集合 SS

现在有 mm 次询问。每次询问给定两个点 u,vu,v 和一个参数 kk

每次询问开始时,集合 SS 为空。小 T 从点 uu 沿树上的简单路径走到点 vv。每经过一个点 pp(包括起点和终点),他都会按照上述规则将 apa_p 加入集合 SS

请你求出操作结束后,集合 SS 中有多少个数不超过 kk

更形式化地,设从 uuvv 的简单路径依次经过

b1,b2,,bl,b_1,b_2,\ldots,b_l,

其中 b1=ub_1=ubl=vb_l=v。集合 SS 初始为空,依次按照上述规则加入

ab1,ab2,,abl.a_{b_1},a_{b_2},\ldots,a_{b_l}.

询问采用强制在线方式,具体规则见输入格式。

输入格式

第一行输入三个整数 n,m,Tn,m,T,分别表示树的点数、询问次数和强制在线参数。

第二行输入 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n,表示各点的权值。

接下来 n1n-1 行,每行输入两个整数 xi,yix_i,y_i,表示树中存在一条连接点 xix_i 和点 yiy_i 的边。

接下来 mm 行,每行输入三个整数 u,v,ku',v',k'。本次询问的真实参数由下式得到:

$$\begin{aligned} u &= u'\mathbin{\mathrm{xor}}(\mathrm{las}\times T),\\ v &= v'\mathbin{\mathrm{xor}}(\mathrm{las}\times T),\\ k &= k'\mathbin{\mathrm{xor}}(\mathrm{las}\times T), \end{aligned}$$

其中 xor\mathrm{xor} 表示按位异或,las\mathrm{las} 表示上一次询问的答案。第一次询问前令 las=0\mathrm{las}=0

输出格式

输出 mm 行,每行一个整数,表示对应询问的答案。

样例

7 6 0
2 3 4 1 5 2 1
1 3
6 3
7 1
2 3
5 6
3 4
4 7 5
2 5 6
3 3 4
1 4 6
5 4 10
7 6 4
3
4
1
3
4
3

样例解释

第一次询问中,小 T 经过的路径为

4317,4\to3\to1\to7,

经过的点权依次为 1,4,2,11,4,2,1,集合 SS 的变化过程为

$$\varnothing \to\{1\} \to\{1,4\} \to\{1,2,5\} \to\{1,2,3,6\}.$$

最终集合中有 33 个不超过 55 的数,因此答案为 33

第二次询问结束后,集合 SS{2,4,5,6}\{2,4,5,6\},因此答案为 44

数据范围

  • 对于 15%15\% 的测试数据,n,m,ai,k500n,m,a_i,k\le500
  • 对于 30%30\% 的测试数据,n,ai,k500n,a_i,k\le500
  • 对于另外 15%15\% 的测试数据,xi=ix_i=iyi=i+1y_i=i+1
  • 对于另外 15%15\% 的测试数据,ai5a_i\le5
  • 对于另外 20%20\% 的测试数据,T=0T=0
  • 对于全部测试数据:
$$1\le n\le2\times10^5, \qquad 1\le m\le10^5, \qquad T\in\{0,1\},$$$$1\le a_i,k\le2\times10^5, \qquad 1\le x_i,y_i,u,v\le n.$$

保证给出的边构成一棵树,且解码后的询问参数合法。