#P12645. [KOI 2024 Round 1] 二叉树

[KOI 2024 Round 1] 二叉树

题目背景

试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。

按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。

题目描述

对于所有子节点个数为 0022 的二叉树 TT,定义 S(T)S(T) 的值如下:

  • 对于 TT 中某个节点 uu,以 uu 为根的子树是仅包含 uuuu 的所有后代节点的集合。
  • TT 的中序遍历序列 p(T)p(T) 是按照中序遍历方式访问节点所得到的序列,其定义如下:
    • rrTT 的根节点。记 [r][r] 为仅包含 rr 的长度为 11 的序列。
    • rr 没有子节点,则 p(T)=[r]p(T) = [r]
    • rr 有两个子节点,设以 rr 的左子节点为根的子树为 XX,右子节点为根的子树为 YY,则有 p(T)=p(X),[r],p(Y)p(T) = p(X), [r], p(Y),按此顺序拼接而成。
  • TT 的叶子节点数为 kk。将编号 1,2,,k1, 2, \dots, k 按照这些叶子节点在 p(T)p(T) 中出现的顺序赋予它们。
  • 若选择了一个子树,该子树中包含的所有叶子节点就被称为“被覆盖”。
  • 对于 1abk1 \leq a \leq b \leq k,定义 f(a,b)f(a, b) 为为了只覆盖编号在 [a,b][a, b] 区间内的叶子节点而不覆盖其他叶子节点所需选择的最少子树个数。
  • S(T)S(T) 的值为所有满足 1abk1 \leq a \leq b \leq k 的整数对 (a,b)(a, b)f(a,b)f(a, b) 之和对 109+710^9 + 7 取模的结果。

例如,假设给定一个如图所示的二叉树 TT,则 f(5,7)f(5, 7) 的值为 22,因为可以通过选择两个子树来仅覆盖 556677 号叶子节点。

根据上述方式,对所有 1ab71 \leq a \leq b \leq 7f(a,b)f(a, b) 求和得到 4747,因此 S(T)=47mod(109+7)S(T) = 47 \bmod (10^9 + 7)

给定两个整数序列 A1,A2,,ANA_1, A_2, \dots, A_NB1,B2,,BNB_1, B_2, \dots, B_N,定义一系列二叉树 T0,T1,,TNT_0, T_1, \dots, T_N 如下:

  • T0T_0 为仅包含一个节点的树;
  • 对于 1iN1 \leq i \leq NTiT_i 是一个二叉树,其左子树为 TAiT_{A_i},右子树为 TBiT_{B_i}

请编写程序,求出 S(T1),S(T2),,S(TN)S(T_1), S(T_2), \dots, S(T_N)

输入格式

第一行输入一个整数 NN
接下来 NN 行,每行输入两个整数 AiA_iBiB_i,以空格分隔。

输出格式

输出 NN 行,第 ii 行输出 S(Ti)S(T_i) 的值。

5
0 0
1 0
1 2
3 1
4 4
3
7
21
47
254

提示

样例 1 解释

示例中的 T4T_4 如下图所示。

约束条件

  • 所有输入均为整数。
  • 1N1000001 \leq N \leq 100\,000
  • 0Aii1 (1iN)0 \leq A_i \leq i - 1\ (1 \leq i \leq N)
  • 0Bii1 (1iN)0 \leq B_i \leq i - 1\ (1 \leq i \leq N)

子问题

  1. (5 分)Ai=Bi=i1 (1iN), N10A_i = B_i = i - 1\ (1 \leq i \leq N),\ N \leq 10
  2. (10 分)Ai=Bi=i1A_i = B_i = i - 1
  3. (5 分)Ai=i1, Bi=0A_i = i - 1,\ B_i = 0
  4. (10 分)所有 T1,,TNT_1, \dots, T_N 的节点总数不超过 10001\,000
  5. (25 分)所有 T1,,TNT_1, \dots, T_N 的节点总数不超过 300000300\,000
  6. (45 分)无额外限制条件

翻译由 ChatGPT-4o 完成