#P15044. [UOI 2022 II Stage] 树

[UOI 2022 II Stage] 树

题目描述

克索尼亚有一棵以顶点 11 为根、包含 nn 个顶点的有根树,每个顶点上写有一个数字。在第 ii 个顶点上写有数字 aia_i

回忆一下,树是一种无环连通图。有根树是指在树中选择一个顶点作为根。

在有根树中,顶点 vv 的祖先是指从 vv 到根路径上的所有顶点(不包括顶点 vv 本身)。顶点 vv 的子树是指所有以 vv 为祖先的顶点集合,包括顶点 vv 本身。

集合 S=(u1,u2,u3,,uk)S = (u_1, u_2, u_3, \dots, u_k) 的 XOR 和定义为数字 u1u2u3uku_1 \oplus u_2 \oplus u_3 \oplus \dots \oplus u_k,其中 \oplus 是按位异或操作,在 Pascal 语言中记为 xor,在 C++/Java/Python 语言中记为 ^

对于数字集合 SS,考虑其所有可能子集的 XOR 和构成的集合。称此集合为 F(S)F(S)

克索尼亚的朋友不断问她这样的问题——“如果考虑顶点 vv 的子树中所有数字的集合(记为 UvU_v),那么集合 F(Uv)F(U_v) 中按升序排列的第 kk 个数是什么?”也就是说,如果取出顶点 vv 子树中的所有数字,考虑它们所有子集的 XOR 和,那么在得到的集合中,按升序排列的第 kk 个数是什么?如果不存在这样的数(即 k>F(Uv)k > |F(U_v)|),则克索尼亚回答数字 1-1。请注意,F(Uv)F(U_v) 是一个集合,而不是多重集。也就是说,如果一个数字出现多次,只应计入一次。

此外,克索尼亚的朋友有时会请她更改树中的一个数字。

输入格式

第一行包含两个整数 n,gn, g (2n51042 \leq n \leq 5 \cdot 10^4, 0g70 \leq g \leq 7) —— 分别表示树中的顶点数量和测试组编号。

接下来的 n1n - 1 行,每行包含两个整数 xi,yix_i, y_i (1xi,yin1 \leq x_i, y_i \leq n)。这表示树中顶点 xix_iyiy_i 之间有一条边。保证该图是一棵树。

下一行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n (0ai<2200 \leq a_i < 2^{20}) —— 表示树顶点上初始数字的数组 aa

下一行包含一个整数 qq (1q51041 \leq q \leq 5 \cdot 10^4) —— 表示查询的数量。

接下来的 qq 行,每行描述一个查询。

更改树中数字的查询格式为 1 xi yi1 \ x_i \ y_i (1xin1 \leq x_i \leq n, 0yi<2200 \leq y_i < 2^{20})。此类查询表示现在第 xix_i 个顶点上的数字变为 yiy_i

另一种类型的查询格式为 2 vi ki2 \ v_i \ k_i (1vin1 \leq v_i \leq n, 1ki1091 \leq k_i \leq 10^9)。此类查询需要找出集合 F(Uvi)F(U_{v_i}) 中按升序排列的第 kik_i 个数,其中 UviU_{v_i} 是顶点 viv_i 子树中的数字集合,F(Uvi)F(U_{v_i}) 是其所有子集 XOR 和构成的集合。如果 ki>F(Uvi)k_i > |F(U_{v_i})|,则输出 1-1

输出格式

对于每个第二类查询,在一个单独的行中输出答案。

5 0
1 2
1 5
2 3
2 4
4 2 3 1 2
7
2 2 4
2 1 2
2 2 3
1 3 4
2 5 1
2 2 8
2 1 5
3
1
2
0
7
4

提示

样例说明

第一个样例的解释。顶点旁的数字表示 aia_i

:::align{center} :::

在第一个查询中,考虑顶点 22 的子树。它包含数字 1,2,31, 2, 3

F([1,2,3])=[0,1,2,3]F([1,2,3]) = [0, 1, 2, 3]

在第二个查询中,考虑整个子树。F([1,2,3,4])=[0,1,2,3,4,5,6,7]F([1, 2, 3, 4]) = [0,1,2,3,4,5,6,7]

更改一个数字后,树的状态如下:

:::align{center} :::

现在,顶点 22 的子树中包含数字 1,2,41, 2, 4

F([1,2,4])=[0,1,2,3,4,5,6,7]F([1,2,4]) = [0,1,2,3,4,5,6,7]

评分细则

  • (6 分): q,n15q, n \leq 15
  • (16 分): q,n500q, n \leq 500
  • (18 分): q,n2000q, n \leq 2000
  • (7 分): 在所有第二类查询中,vi=1v_i = 1
  • (13 分): 没有更改数字的查询。
  • (11 分): 所有 ai,yia_i, y_i 是 2 的幂。
  • (29 分): 无额外限制。

翻译由 DeepSeek V3 完成