编程题
### 问题描述 小秋最近在研究树上问题。一天他在对着一颗树发呆的时候,想到了一个神奇的题目。 给定一颗包含 $n$ 个顶点的树,每个点权为 $w_i$,每条边边权 $c_i$。现在需要你完成 $q$ 次操作,操作分为以下四种。 1. 给定树上两个不同的点 $a,b$ 和一个整数 $x$,将 $a,b$ 两点的路径上的所有边权都异或上 $x$。 2. 给定树上两个不同的点 $a ,b$ 和一个整数 $x$,将 $a,b$ 两点的路径上的所有点权都异或上 $x$。 3. 给定树上两个不同的点 $a,b$,求 $a, b$ 两点的路径上所有点权的异或和。 4. 给定树上一个点 $a$,求 $a$ 的点权和与 $a$ 相连所有边的边权的异或和。 ### 输入格式 第一行包含两个整数 $n,q$,分别表示树的顶点个数、操作的总个数。 第二行包含 $n$ 个用空格分隔的整数,其中第 $i$ 个数字表示数列第 $i$ 个顶点的初始点权 $w_i$。 接下来 $n - 1$ 行,每行输入三个整数,格式 `u v c`,第 $i$ 行表示有一条连接 $u_i,v_i$ 边权为 $c_i$ 的边。 接下来 $q$ 行每行包含若干个整数,表示一个操作,具体如下: 操作 $1$:格式:`1 a b x` 含义:将 $a,b$ 两点的最短路径上的所有边权都异或上 $x$。 操作 $2$:格式:`2 a b x` 含义:将 $a,b$ 两点的最短路径上的所有点权都异或上 $x$。 操作 $3$:格式:`3 a b` 含义:求 $a, b$ 两点的最短路径上所有点权的异或和。 操作 $4$:格式:`4 a` 含义:求 $a$ 的点权和与 $a$ 相连所有边的边权的异或和。 注:本题输入数据较大,建议采用较快的数据读入方式。 ### 输出格式 输出包含多行,对于 $3,4$ 操作,输出一行,包含一个整数,表示当前操作的答案。 ### 样例输入 ``` 6 10 1 3 5 2 2 3 1 2 2 1 3 3 2 4 5 2 5 3 3 6 1 1 1 2 2 1 2 1 2 3 1 5 4 3 2 5 6 7 3 2 6 2 4 6 10 4 5 2 5 6 1 3 5 6 ``` ### 样例输出 ``` 0 7 4 6 0 ``` ### 说明 几次修改操作树的变化如下: ![图片描述](https://dn-simplecloud.shiyanlou.com/questions/uid2193091-20230820-1692461570570) ### 评测数据规模 对于 $20$% 的评测数据,$1 \leq n,q \leq 10^3$; 对于 $40$% 的评测数据,$1\leq n,q \leq 10^4$; 对于 $100$% 的评测数据,$1 \leq n,q \leq 10^5 , 0 \leq w_i,c_i,x \leq 10^9$。
查看答案
赣ICP备20007335号-2