第一行包含一个正整数 $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(inti=p+1; i<=n; i++)
addedge(rng61()%(i-1)+1, i);
for(inti=1; i<=n; i++)
a[i]=rng61()%n+1;
}
第二行包含一个正整数 $m$,表示询问次数。
接下来 $m$ 行,每行 $3$ 个正整数,形式为1 x y或者2 A B,依次表示每个询问。