/ Vijos / 题库 /

切树游戏

切树游戏

描述

小Q是一个热爱学习的人,他经常去维基百科学习计算机科学。

就在刚才,小Q认真地学习了一系列位运算符,其中按位异或的运算 xor ~xor~对他影响很大。按位异或的
运算符是双目运算符。按位异或具有交换律,即i xor j=j xor ii~xor~j=j~xor~i

他发现,按位异或可以理解成被运算的数字的二进制位对应位如果相同,则结果的该位置为00,否则为11,例如:1(01) xor 2(10)=3(11)1(01)~xor~2(10)=3(11)

他还发现,按位异或可以理解成参与运算的数字的每个二进制位都进行了不进位的加法,例如:3(11) xor 3(11)=0(00)3(11)~xor~3(11)=0(00)

现在小Q有一棵nn个结点的无根树TT,结点依次编号为11nn,其中结点ii的权值为viv_i

定义一棵树的价值为它所有点的权值的异或和,一棵树TT的连通子树就是它的一个连通子图,并且这个图也是一棵树。

小Q想要在这棵树上玩切树游戏,他会不断做以下两种操作:

  • Change x y 将编号为xx的结点的权值修改为yy
  • Query k 询问有多少棵T的非空连通子树,满足其价值恰好为kk

小Q非常喜(bu)欢(hui)数学,他希望你能快速回答他的问题,你能写个程序帮帮他吗?

格式

输入格式

第一行包含两个正整数n,mn,m,分别表示结点的个数以及权值的上限。

第二行包含nn个非负整数v1,v2,,vnv_1, v_2,\cdots, v_n,分别表示每个结点一开始的权值。

接下来n1n-1行,每行包含两个正整数ai,bia_i, b_i,表示有一条连接aia_ibib_i的无向树边。

接下来一行包含一个正整数qq,表示小Q操作的次数。

接下来qq行每行依次表示每个操作。

输出格式

输出若干行,每行一个整数,依次回答每个询问。因为答案可能很大,所以请对1000710007取模输出。

样例1

样例输入1

4 4
2 0 1 3
1 2
1 3
1 4
12
Query 0
Query 1
Query 2
Query 3
Change 1 0
Change 2 1
Change 3 3
Change 4 1
Query 0
Query 1
Query 2
Query 3

样例输出1

3
3
2
3
2
4
2
3

限制

对于100%的数据,1aibi,xn1\le a_i, b_i, x\le n; 0vi,y,k<m0\le v_i, y, k < m,修改操作不超过1000010000个。

  • 测试点1,2,3,4满足n2000n\le 2000m=64m=64q64q\le 64且不存在修改操作
  • 测试点5,6,7,8满足n30000n\le 30000m=8m=8q30000q\le 30000ai=ia_i = i; bi=i+1b_i = i + 1
  • 测试点9,10满足n30000n\le 30000m=128m=128q30000q\le 30000ai=ia_i = i; bi=i+1b_i = i + 1
  • 测试点11,12,13,14,15满足n30000n\le 30000m=4m = 4q30000q\le 30000
  • 测试点16,17,18,19,20满足n30000n\le 30000, m=128m = 128q30000q \le 30000

来源

SDOI 2017 Round2 Day1

信息

ID
2021
难度
4
分类
(无)
标签
递交数
43
已通过
18
通过率
42%
被复制
3
上传者

相关

在下列训练计划中:

RP++分类题库