luogu#P9090. 「SvR-2」G64

    ID: 13074 远端评测题 2000ms 256MiB 尝试: 2 已通过: 1 难度: 6 上传者: 标签>动态规划,dp贪心洛谷原创O2优化矩阵加速,矩阵优化洛谷月赛

「SvR-2」G64

题目描述

定义对于两棵有根二叉树 T1,T2T_1,T_2merge(T1,T2)\operatorname{merge}(T_1,T_2) 的结果是一棵二叉树,满足其根节点的左子树为 T1T_1,右子树为 T2T_2,显然 merge(T1,T2)\operatorname{merge}(T_1,T_2) 的结果唯一且必然存在。

定义对于一棵有根二叉树 TT,有函数 Gx(T)G_x(T)。其中 G1(T)G_1(T) 表示沿着 TT 的根向右儿子走,直到走到某个不存在右儿子的节点,将其右子树变为 TT,这棵新树即为 G1(T)G_1(T) ,而当 x>1x>1 时,Gx(T)G_x(T) 满足如下关系:

$$G_x(T)=G_1(\operatorname{merge}(G_{x-1}(T),G_{x-1}(T))) $$

给一棵 nn 个节点的以 11 为根的有根二叉树,记以 ii 为根的子树为 TiT_iqq 次询问,每次询问给定 x,ix,i,求 Gx(Ti)G_x(T_i) 的最大独立集。

输入格式

第一行两个整数 n,qn,q

之后 nn 行,每行两个整数 lsi,rsils_i,rs_i 表示其左儿子和右儿子,若为 00 则说明没有对应儿子。

之后 qq 行,每行两个整数 x,ix,i ,表示一次询问。

输出格式

qq 行,每行一个数,表示这次询问的 Gx(Ti)G_x(T_i) 的最大独立集大小对 998244353998244353 取模的结果。

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)G_2(T_5) 的结果如下图(忽略编号):

对于第二组样例,我有一个绝妙的解释,可惜 G64G_{64} 太大了,这里写不下。

数据规模与约定

本题开启捆绑测试和 O2 优化。

Subtask 数据范围/特殊性质 分值
11 n,q,x10n,q,x\le 10 10pts10 \operatorname{pts}
22 x=1x =1 5pts5 \operatorname{pts}
33 x3x\le 3 10pts10 \operatorname{pts}
44 x10x\le 10 15pts15 \operatorname{pts}
55 保证 TiT_i 大小为 11 10pts10 \operatorname{pts}
66 无特殊限制 50pts50 \operatorname{pts}

对于 100%100\% 的数据, 1x1091\le x\le 10^91n5×1051\le n\le 5\times 10^51q5×1051\le q\le 5\times 10^5