【模板】动态树(LCT)
题目描述
给定 $n$ 个点以及每个点的权值,要你处理接下来的 $m$ 个操作。
操作有四种,操作从 $0$ 到 $3$ 编号。点从 $1$ 到 $n$ 编号。
- `0 x y` 代表询问从 $x$ 到 $y$ 的路径上的点的权值的 $\text{xor}$ 和。保证 $x$ 到 $y$ 是联通的。
- `1 x y` 代表连接 $x$ 到 $y$,若 $x$ 到 $y$ 已经联通则无需连接。
- `2 x y` 代表删除边 $(x,y)$,不保证边 $(x,y)$ 存在。
- `3 x y` 代表将点 $x$ 上的权值变成 $y$。
输入输出格式
输入格式
第一行两个整数,分别为 $n$ 和 $m$,代表点数和操作数。
接下来 $n$ 行,每行一个整数,第 $(i + 1)$ 行的整数 $a_i$ 表示节点 $i$ 的权值。
接下来 $m$ 行,每行三个整数,分别代表操作类型和操作所需的量。
输出格式
对于每一个 $0$ 号操作,你须输出一行一个整数,表示 $x$ 到 $y$ 的路径上点权的 $\text{xor}$ 和。
输入输出样例
输入样例 #1
3 3
1
2
3
1 1 2
0 1 2
0 1 1
输出样例 #1
3
1
输入样例 #2
5 14
114
514
19
19
810
1 1 2
0 1 2
2 1 2
1 1 2
1 2 3
2 1 3
1 1 3
1 4 5
1 2 5
0 3 5
0 3 4
3 5 233333
0 1 5
0 2 5
输出样例 #2
624
315
296
232709
232823
说明
#### 数据规模与约定
对于全部的测试点,保证:
- $1 \leq n \leq 10^5$,$1 \leq m \leq 3 \times 10^5$,$1 \leq a_i \leq 10^9$。
- 对于操作 $0, 1, 2$,保证 $1 \leq x, y \leq n$。
- 对于操作 $3$,保证 $1 \leq x \leq n$,$1 \leq y \leq 10^9$。