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