CFCF2195G.Idiot First Search and Queries

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

本题与 E 题使用相同的定义。但本题并不要求与 E 题相同的答案。

有一棵包含 n+1n+1 个顶点的二叉树(nn 为奇数),顶点编号为 0,1,,n0,1,\ldots,n。每个顶点上最多可以写一个字母,一开始所有顶点上都没有写字母。树的根节点是顶点 00

在树中,顶点 00 是顶点 11 的父节点,其余顶点要么有 22 个子节点,要么没有子节点。

Bob 迷失在树的某个顶点,他希望通过到达顶点 00 的方式逃出树。对于大多数有常识的人来说,这很容易。但由于 Bob 很笨,他发明了一种全新的遍历树的方法,被称为“笨蛋优先遍历法”("Idiot First Search")。

当 Bob 处于顶点 vv 时(1vn1 \le v \le n),他按照如下规则移动:

  • 如果顶点 vv 是叶节点,Bob 总是移动到 vv 的父节点;否则,继续判断以下情况。
  • 如果顶点 vv 上什么都没写,Bob 在顶点 vv 上写下 'L',并移动到 vv 的左儿子;
  • 如果顶点 vv 上写有字母 'L',Bob 将其覆盖为 'R',并移动到 vv 的右儿子;
  • 如果顶点 vv 上写有字母 'R',Bob 擦除它,移动到 vv 的父节点。

Bob 移动到相邻顶点每次正好需要 11 秒,因此进行 xx 次移动总共需要 xx 秒。

已经证明,无论 Bob 从哪一个顶点出发,都能在有限(尽管可能非常大)的时间内到达顶点 00。我们不知道是谁证明了这点,肯定不是 Bob,但这一点确实被证明了。

你需要回答 qq 个如下类型的询问:

  • v  kv\;k:假设 Bob 从顶点 vv 出发,恰好经过 kk 次移动后,Bob 处于哪个顶点(1vn1 \le v \le n)。

对于每个询问,设 TvT_v 表示 Bob 从顶点 vv 到达顶点 00 的所需时间。保证每个询问 k<Tvk < T_v

输入格式

每个测试点包含多组测试用例。第一行包含测试用例数量 tt1t1041 \le t \le 10^4)。接下来是每组测试用例的数据。

每个测试用例的第一行包含整数 nnqq1n3000011 \le n \le 300\,0011q4000001 \le q \le 400\,000nn 为奇数)。

接下来的 nn 行,每行包含两个整数 lil_irir_i,分别为顶点 ii 的左右子节点编号(0li,rin0 \le l_i,r_i \le n)。

对于每个顶点,如果 li=ri=0l_i = r_i = 0,则表示该顶点没有子节点。否则,lil_irir_i 分别为顶点 ii 的左儿子和右儿子。

接下来的 qq 行,每行包含两个整数 vjv_jkjk_j,表示第 jj 个询问(1vjn1 \le v_j \le n0kj<min(109+7,Tvj)0 \le k_j < \min(10^9+7, T_{v_j}))。

保证输入描述的是一棵合法的二叉树,满足题目中所述的条件。

且所有测试用例中的 nn 之和不超过 300001300\,001

所有测试用例中的 qq 之和不超过 400000400\,000

输出格式

对于每个测试用例,按询问顺序依次输出每个询问的答案,每个测试用例输出一行。

输入输出样例

  • 输入#1

    3
    1 1
    0 0
    1 0
    5 5
    2 3
    0 0
    4 5
    0 0
    0 0
    3 6
    3 8
    3 11
    4 7
    5 8
    7 7
    2 3
    4 5
    0 0
    6 7
    0 0
    0 0
    0 0
    1 9
    2 18
    3 11
    3 12
    3 13
    5 7
    7 17

    输出#1

    1
    2 3 5 2 1
    2 2 1 3 1 2 4

说明/提示

在第一个测试用例中,只有两个顶点,顶点 00 和顶点 11。很显然,Bob 从顶点 11 出发经过 00 次移动后仍在顶点 11

在第二个测试用例中,树结构如下:

Bob 从顶点 33 出发到达顶点 00 需要 1414 秒。具体移动过程如下:

3L4X3R5X3X1L2X1R3L4X3R5X3X1X03 \xrightarrow{\mathtt{L}} 4 \xrightarrow{\mathtt{X}} 3 \xrightarrow{\mathtt{R}} 5 \xrightarrow{\mathtt{X}} 3 \xrightarrow{\mathtt{X}} 1 \xrightarrow{\mathtt{L}} \color{red}{2} \xrightarrow{\mathtt{X}} 1 \xrightarrow{\mathtt{R}} \color{red}{3} \xrightarrow{\mathtt{L}} 4 \xrightarrow{\mathtt{X}} 3 \xrightarrow{\mathtt{R}} \color{red}{5} \xrightarrow{\mathtt{X}} 3 \xrightarrow{\mathtt{X}} 1 \xrightarrow{\mathtt{X}} 0

其中,箭头上方的字母表示移动前顶点上的字母,X\mathtt{X} 表示该顶点上没有写字母。

如红色标出:

  • Bob 从顶点 33 出发,进行 66 次移动后,Bob 在顶点 22
  • Bob 从顶点 33 出发,进行 88 次移动后,Bob 在顶点 33
  • Bob 从顶点 33 出发,进行 1111 次移动后,Bob 在顶点 55
首页