A93185.「NOI2025」数字树
NOI/NOI+/CTSC
通过率:0%
时间限制:4.00s
内存限制:1024MB
题目描述
给定一棵 4n−1 个结点的二叉树,其中每个非叶结点都有恰好两个子结点。非叶结点编号为 1 到 2n−1,叶子结点编号为 2n 到 4n−1。初始时,每个叶子结点上都没有数字。
定义一个 DFS 序是优美的,当且仅当按该 DFS 序将所有标有数字的叶子结点上的数字拼成一个序列时,该序列可以通过若干次消除相邻相同数字的方式得到空序列。例如,在下图中,若叶子结点 4,6 上标有数字 1,叶子结点 5,7 上标有数字 2,则按 DFS 序 [1,4,2,7,3,5,6] 将所有标有数字的叶子结点上的数字拼成的序列为 [1,2,2,1],可以通过消除相邻的 2 的方式得到 [1,1],再通过消除相邻的 1 的方式得到空序列,因此该 DFS 序是优美的;而按 DFS 序 [1,4,2,3,5,6,7] 将所有标有数字的叶子结点上的数字拼成的序列为 [1,2,1,2],无法通过若干次消除相邻相同数字的方式得到空序列,因此该 DFS 序不是优美的。

给定 n 次操作,第 i (1≤i≤n) 次操作会选择两个没有数字的叶子结点,然后将这两个结点标上数字 i。保证在每次操作后,存在至少一个优美的 DFS 序。你需要求出每次操作后的优美的 DFS 序的数量。由于答案可能较大,你只需要求出答案对 1,000,000,007 取模后的结果。
输入格式
从文件 tree.in 中读入数据。
输入的第一行包含一个非负整数 c,表示测试点编号。c=0 表示该测试点为样例。
输入的第二行包含一个正整数 n,表示二叉树的结点个数为 4n−1。
输入的第 i+2 (1≤i≤2n−1) 行包含两个正整数 li 和 ri,分别表示结点 i 的左右子结点。保证 i<li,ri≤4n−1,且所有的 li,ri 互不相同。
输入的第 i+2n−1 (1≤i≤n) 行包含两个正整数 ai,bi,表示第 i 次操作选择的叶子结点的编号。保证 2n≤ai,bi≤4n−1,且所有的 ai,bi 互不相同。
输出格式
输出到文件 tree.out 中。
输出 n 行,其中第 i (1≤i≤n) 行包含一个非负整数,表示第 i 次操作后的优美的 DFS 序的数量对 1,000,000,007 取模后的结果。
输入输出样例
输入#1
0 2 4 2 3 7 5 6 4 6 5 7
输出#1
8 4
输入#2
0 6 2 3 4 21 22 23 5 11 6 8 7 9 12 13 10 18 14 15 16 17 19 20 12 13 14 15 16 19 17 18 20 21 22 23
输出#2
2048 2048 2048 1024 512 512