第一行包含一个正整数 $T$,表示测试数据的组数。
每组数据第一行包含 5 个正整数 $n,p,SA,SB,SC$,其中 $n$ 表示树的节点个数。
为了在某种程度上减少输入量,树边和每个点的题目种类 $\texttt{a[]}$ 将由以下代码生成:
unsigned int SA, SB, SC;
unsigned int rng61(){
SA ^= SA << 16;
SA ^= SA >> 5;
SA ^= SA << 1;
unsigned int t = SA;
SA = SB;
SB = SC;
SC ^= t ^ SA;
return SC;
}
void gen(){
scanf("%d%d%u%u%u", &n, &p, &SA, &SB, &SC);
for(int i = 2; i <= p; i++)
addedge(i - 1, i);
for(int i = p + 1; i <= n; i++)
addedge(rng61() % (i - 1) + 1, i);
for(int i = 1; i <= n; i++)
a[i] = rng61() % n + 1;
}
如对生成方式仍有疑问,请参考下发文件中的参考程序。
第二行包含一个正整数 $m$,表示询问次数。
接下来 $m$ 行,每行 $3$ 个正整数,形式为 1 x y 或者 2 A B,依次表示每个询问。