题目描述
定义对于两棵有根二叉树 T1,T2,merge(T1,T2) 的结果是一棵二叉树,满足其根节点的左子树为 T1,右子树为 T2,显然 merge(T1,T2) 的结果唯一且必然存在。
定义对于一棵有根二叉树 T,有函数 Gx(T)。其中 G1(T) 表示沿着 T 的根向右儿子走,直到走到某个不存在右儿子的节点,将其右子树变为 T,这棵新树即为 G1(T) ,而当 x>1 时,Gx(T) 满足如下关系:
$$G_x(T)=G_1(\operatorname{merge}(G_{x-1}(T),G_{x-1}(T)))
$$
给一棵 n 个节点的以 1 为根的有根二叉树,记以 i 为根的子树为 Ti,q 次询问,每次询问给定 x,i,求 Gx(Ti) 的最大独立集。
输入格式
第一行两个整数 n,q。
之后 n 行,每行两个整数 lsi,rsi 表示其左儿子和右儿子,若为 0 则说明没有对应儿子。
之后 q 行,每行两个整数 x,i ,表示一次询问。
输出格式
q 行,每行一个数,表示这次询问的 Gx(Ti) 的最大独立集大小对 998244353 取模的结果。
5 3
2 3
0 4
5 0
0 0
0 0
2 5
2 1
1 1
5
24
6
5 1
2 3
0 4
5 0
0 0
0 0
64 1
592424678
提示
样例解释
对于第一组样例,G2(T5) 的结果如下图(忽略编号):
对于第二组样例,我有一个绝妙的解释,可惜 G64 太大了,这里写不下。
数据规模与约定
本题开启捆绑测试和 O2 优化。
Subtask |
数据范围/特殊性质 |
分值 |
1 |
n,q,x≤10 |
10pts |
2 |
x=1 |
5pts |
3 |
x≤3 |
10pts |
4 |
x≤10 |
15pts |
5 |
保证 Ti 大小为 1 |
10pts |
6 |
无特殊限制 |
50pts |
对于 100% 的数据,
1≤x≤109,1≤n≤5×105,1≤q≤5×105。