P1055树的遍历traverse

时间限制 1000 ms内存限制 512 MiB通过率 —
显示算法标签树形 DP · 状态压缩 DP · 字典序

【题目描述】

小 X 和小 R 来到了一座树形迷宫。为了确认每个出口都能够正常通行,小 R 需要从入口出发,到达全部出口后再返回入口。这个过程恰好相当于对整棵树进行一次遍历。

这座迷宫可以抽象成一棵拥有 2n2^n 个叶结点的满二叉树,共有 2n+112^{n+1}-1 个结点,并按照从上到下、从左到右的顺序编号为 1,2,,2n+111,2,\ldots,2^{n+1}-1

编号为 1,2,,2n11,2,\ldots,2^n-1 的结点是非叶结点。对于每个非叶结点 uu,其左儿子编号为 2u2u,右儿子编号为 2u+12u+1。编号为 2n,2n+1,,2n+112^n,2^n+1,\ldots,2^{n+1}-1 的结点是叶结点。

每个非叶结点 uu 都有一名守卫。初始时,所有守卫均处于沉睡状态。在小 R 出发前,小 X 可以花费 wuw_u 点预算将结点 uu 的守卫唤醒,总花费不能超过 kk

每个叶结点 vv 上写有一个符文 qvq_v。所有叶结点上的符文恰好构成 1,2,,2n1,2,\ldots,2^n 的一个排列。

小 R 从根结点 11 出发,初始持有一个空序列 pp,并按照下列规则完成巡查:

  • 到达叶结点 vv 时,将符文 qvq_v 加入序列 pp 的末尾,随后返回其父亲结点。
  • 到达非叶结点 uu 时,若守卫已经被唤醒,小 R 必须先完整遍历左子树,再完整遍历右子树。
  • 到达非叶结点 uu 时,若守卫仍处于沉睡状态,小 R 可以自行选择两个子树的遍历顺序。

当小 R 从根结点返回时,巡查结束。此时每个叶结点恰好被访问一次,得到的序列 pp 称为本次遍历的遍历序列

小 R 能够知道哪些守卫已经被唤醒。小 X 希望最终的遍历序列字典序尽可能大,小 R 希望最终的遍历序列字典序尽可能小,双方都会采取最优策略。

对于两个长度相同的序列 a,ba,b,若存在位置 ii,使得 ai<bia_i<b_i,且对于所有 1j<i1\leq j<i 都有 aj=bja_j=b_j,则称 aa 的字典序小于 bb

请你求出双方均采取最优策略时,小 R 遍历整棵树得到的遍历序列

【输入格式】

从文件 traverse.in\textbf{\textit{traverse.in}} 中读入数据。

本题包含多组测试数据。

输入的第一行包含两个非负整数 c,Tc,T,分别表示测试点编号与测试数据的组数。c=0c=0 表示该测试点为样例。

对于每组测试数据:

第一行包含两个整数 n,kn,k,分别表示迷宫的规模与小 X 能够使用的预算上限。

第二行包含 2n12^n-1 个非负整数 w1,w2,,w2n1w_1,w_2,\ldots,w_{2^n-1},其中 wuw_u 表示将结点 uu 的守卫唤醒所需的花费。

第三行包含 2n2^n 个正整数 q2n,q2n+1,,q2n+11q_{2^n},q_{2^n+1},\ldots,q_{2^{n+1}-1},表示每个叶结点上的符文。

【输出格式】

输出到文件 traverse.out\textbf{\textit{traverse.out}} 中。

对于每组测试数据,输出一行 2n2^n 个正整数,依次表示双方均采取最优策略时得到的遍历序列

【样例 1 输入】

0 21 012 11 112 1

【样例 1 输出】

1 22 1

【说明/提示】

【样例 1 解释】

对于第一组测试数据,小 X 无法将根结点的守卫唤醒。小 R 会选择先访问符文为 11 的叶结点,得到的遍历序列(1,2)(1,2)

对于第二组测试数据,小 X 可以将根结点的守卫唤醒,使小 R 必须先遍历左子树,得到的遍历序列(2,1)(2,1)

【样例 2】

见选手目录下的 traverse/traverse2.in\textbf{\textit{traverse/traverse2.in}}traverse/traverse2.ans\textbf{\textit{traverse/traverse2.ans}}

该组样例符合测试点 131\sim3 的数据范围。

【样例 3】

见选手目录下的 traverse/traverse3.in\textbf{\textit{traverse/traverse3.in}}traverse/traverse3.ans\textbf{\textit{traverse/traverse3.ans}}

该组样例符合测试点 464\sim6 的数据范围。

【样例 4】

见选手目录下的 traverse/traverse4.in\textbf{\textit{traverse/traverse4.in}}traverse/traverse4.ans\textbf{\textit{traverse/traverse4.ans}}

该组样例符合测试点 7197\sim19 的数据范围。

【样例 5】

见选手目录下的 traverse/traverse5.in\textbf{\textit{traverse/traverse5.in}}traverse/traverse5.ans\textbf{\textit{traverse/traverse5.ans}}

该组样例符合测试点 202520\sim25 的数据范围。

【数据范围】

对于 100%100\% 的数据,保证 1n111\leq n\leq11,单个测试点内所有测试数据满足 4n5×106\sum 4^n\leq5\times10^6

测试点编号nn特殊性质
131\sim3n3n\leq3
464\sim6n11n\leq11A
7197\sim19n8n\leq8
202520\sim25n11n\leq11

特殊性质 A:保证 k=0k=0,且对于所有非叶结点 uu,均有 wu1w_u\geq1

对于所有测试数据,保证:

  • 0c250\leq c\leq251T101\leq T\leq10
  • 0k10120\leq k\leq10^{12}
  • 对于所有 1u<2n1\leq u<2^n,均有 0wu10120\leq w_u\leq10^{12}
  • q2n,q2n+1,,q2n+11q_{2^n},q_{2^n+1},\ldots,q_{2^{n+1}-1} 构成 1,2,,2n1,2,\ldots,2^n 的一个排列。

【题解】

已公开 1 篇题解,官方题解会优先显示。

查看题解