OJ现已增加邮箱找回密码功能,还没有绑定邮箱的同学们请抓紧时间,以免密码丢失无法找回


问题1542--奇妙的树上王国

1542: 奇妙的树上王国

时间限制: 2 Sec  内存限制: 512 MB
提交: 5  解决: 3
[提交] [状态] [讨论版] [命题人:]

题目描述

小蓝闲来无事,这天他建造了一个属于他的树上王国,王国的形态是一颗树,总共有 n 个节点,并且小蓝把他的王宫设立在了 1 号点,因此我们认为这棵树以 1 号节点为根,此外每个节点都有重兵把守,对于每个节点 i 守的士兵武力值为 wi ,小蓝想要测试每个点的士兵武力值是否合格,假设小蓝的武力值为 k ,如果士兵的武力值 wi & k =0 的话,我们认为第 i 个节点的武力值合格,由于自身原因,小蓝的武力值会不定期进行变化,另外小蓝也会不定期对某个节点的士兵数量进行变动进而影响该节点的武力值,具体来说,总共会有以下三种操作:
1、设节点 x,y 的简单路径上所有点的点集为 S ,问有多少个 S 的子集使得该子集中存在某个点的武力值不合格。
2、令 = k | y
3、将点 x 的武力值变更为 y

小蓝想知道所有第一种操作的答案,由于每次询问的答案可能很大,每次询问的结果对 998244353 取模。
注意:虽然王宫在1号节点,但是1号节点也是有士兵的。
上述中 &,| 均为位运算操作。

输入

输入描述:
第一行输入三个整数 n,k,(1<= <=1e5,0<= <=1e9,1<= <=3e5) 表示树上的节点数、小蓝初始的武力值、操作次数。
接下来一行输入 n 个数,第 i 个数表示 wi
接下来 n-1 行每行输入两个整数 x,y 表示节点 x 到节点 y 之间存在一条边。
接下来 q 行,每行输入三个整数 op,x,y ,表示一次操作。
op=1 ,则表示询问 x,y 之间的简单路径的答案 (1<= x,<= n)
op=2 ,若 x=0 ,则表示令 k | y 。否则表示将第 x 个节点的武力值更改为 y(0<= <=1e9) 

输出

对于每个第一种操作输出一行一个数表示当前询问的答案。

样例输入 Copy

3 1 4
1 2 3
1 2
1 3
1 1 2
1 2 3
2 0 2
1 2 3

样例输出 Copy

2
6
7

提示

对于第一次询问,不合格的点集有 {1,3} ,可能的点集有 {1},{1,2} 。
对于第二次询问,不合格的点集有 {1,3} ,可能的点集有 {1},{3},{1,2},{2,3},{1,3},{1,2,3} 。
对于第三次询问,不合格的点集有 {1,2,3} ,可能的点集有{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}。

来源/分类