题目描述
给定一棵以 1 为根的包含 n 个节点的有根树。第 i 个节点有点权 ai。
定义函数 f(u,v) 表示从 u 到 v 经过的所有节点的点权的可重集的中位数。
请注意,本题中的中位数的定义与数学中的定义略有不同:这里一个长度为 t 的序列的中位数定义为这个序列第 ⌈2t+1⌉ 小的数。
定义函数 cover(x1,y1,x2,y2) 表示从 x1 到 y1 的路径是否完全覆盖了从 x2 到 y2 的路径。如果完全覆盖,则 cover(x1,y1,x2,y2)=1,否则 cover(x1,y1,x2,y2)=0。
你需要依次处理 q 次操作,按照以下格式给出:
1 u
:表示一次操作,需要你将点 u 的点权对 1 异或;
2 u v
:表示一次询问,需要你求出 1≤i≤n,1≤j≤nmax{cover(i,j,u,v)f(i,j)}。
对于第二类操作,保证每次询问均满足 u 不是 v 的祖先且 v 不是 u 的祖先,且 u=v。
你需要对于每个第二类操作,输出对应的值。
输入格式
第一行两个正数 n 和 q ,分别表示树的节点数与询问次数。
第二行 n 个整数,第 i 个数表示第 i 个节点的点权 ai。
下面 n−1 行,每行两个整数 x,y ,描述一条连接 x 与 y 的边。
下面 q 行,每行先输入一个整数 opt ,表示本次是是操作还是询问。 若 opt=1 ,则这是一次操作,且接下来会输入一个整数 u ;若 opt=2 ,则这是一次询问,且接下来会输入两个整数 u,v 。其具体意义见【题目描述】。
输出格式
对于每次询问输出一行,即对应询问的答案。
提示
【样例解释】
第一次是询问。显然,只有 (i=4,j=8) 满足 cover(i,j,u,v)=1。此时 f(i,j)=3。
第二次是操作。将 3 号节点的点权改为了 2。
第三次是询问。当 i=4,j=3 时,cover(i,j,u,v)=1 且 f(i,j)=4 。不难发现,对于其他所有满足 cover(i,j,u,v)=1 的节点对 (i,j),均没有 f(i,j)>4。
【数据范围】
- Subtask1(8pts):n,q≤50;
- Subtask2(12pts):n,q≤2×103;
- Subtask3(16pts):n,q≤4×104;
- Subtask4(10pts):保证树的形态随机生成;
- Subtask5(12pts):保证没有 1 操作;
- Subtask6(12pts):保证每次询问的 u,v 都是叶子节点;
- Subtask7(30pts):无特殊限制。
Subtask4 的随机方式为 :随机生成一个的排列 p,对于 i∈[2,n],pi 向 p1,p2,...,pi−1 中等概率随机的一个点连边。
对于 100% 的数据满足,1≤n,q,ai≤105,保证每次询问均满足 u 不是 v 的祖先且 v 不是 u 的祖先,且 u=v 。