CF1930H Interactive Mex Tree

题目描述

这是一个交互题。 Alice 有一棵包含 $n$ 个节点的树 $T$,节点编号为 $1$ 到 $n$。Alice 会把 $T$ 展示给 Bob。Bob 观察 $T$ 后,需要告诉 Alice 两个 $[1,2,\ldots,n]$ 的排列 $p_1$ 和 $p_2$。 然后,Alice 会进行 $q$ 轮如下的游戏。 - Alice 会创建一个数组 $a$,它是 $[0,1,\ldots,n-1]$ 的一个排列。节点 $v$ 的值为 $a_v$。 - Alice 会选择树 $T$ 上的两个节点 $u$ 和 $v$($1 \leq u, v \leq n$,$u \neq v$),并告知 Bob。Bob 需要找出从节点 $u$ 到 $v$ 的唯一简单路径上所有节点的值的 $\operatorname{MEX}^\dagger$。 - 为了找到这个值,Bob 每轮最多可以向 Alice 询问 $5$ 次。每次询问,Bob 需要给出三个整数 $t$、$l$ 和 $r$,其中 $t$ 只能取 $1$ 或 $2$,且 $1 \leq l \leq r \leq n$。Alice 会返回 $$ \min_{i=l}^{r} a[p_{t,i}] $$ 的值。 注意所有轮次互相独立。特别地,不同轮次的 $a$、$u$ 和 $v$ 可以不同。 Bob 很困惑,因为他只会用 HLD(重链剖分)来做,每轮需要 $O(\log n)$ 次询问。所以他需要你的帮助来赢得游戏。 $^\dagger$ $\operatorname{MEX}$(最小未出现数)定义为:对于一组整数 $c_1, c_2, \ldots, c_k$,$\operatorname{MEX}$ 是不在该集合中出现的最小非负整数 $x$。

输入格式

每个测试点包含多组测试数据。第一行包含一个整数 $t$($1 \leq t \leq 10^4$)——表示测试数据组数。请读入它。 每组测试数据的描述如下。 每组测试数据的第一行包含两个正整数 $n$ 和 $q$($2 \leq n \leq 10^5$,$1 \leq q \leq 10^4$)——表示树 $T$ 的节点数和游戏轮数。 接下来的 $n-1$ 行,每行包含两个整数 $u$ 和 $v$($1 \leq u, v \leq n$,$u \neq v$),表示树 $T$ 中的一条边。保证给定的边构成一棵树。 保证所有测试数据中 $n$ 和 $q$ 的总和不超过 $10^5$ 和 $10^4$。 还保证所有测试数据中 $n \cdot q$ 的总和不超过 $3 \times 10^6$。 每组测试数据的交互从你输出两个 $[1,2,\ldots,n]$ 的排列 $p_1$ 和 $p_2$ 开始。 新的一行输出 $n$ 个两两不同的整数,表示 $p_1$。 下一行输出 $n$ 个两两不同的整数,表示 $p_2$。 Alice 会开始进行游戏。 每轮,你需要读入两个整数 $u$ 和 $v$($1 \leq u, v \leq n$,$u \neq v$)。你需要找出从 $u$ 到 $v$ 的唯一简单路径上所有节点的值的 $\operatorname{MEX}$。 为了进行一次询问,输出 "? $t$ $l$ $r$"(不含引号),其中 $t$ 只能取 $1$ 或 $2$,$1 \leq l \leq r \leq n$。随后你需要读入一个整数——表示本次询问的答案 $\min_{i=l}^{r} a_{p_{t,i}}$。每轮最多只能进行 $5$ 次询问。 如果你想输出答案,输出 "! $x$"($1 \leq x, y \leq n$,不含引号)。之后读入一个整数,通常为 $1$。 如果你收到 $-1$ 而不是有效回复,说明你的程序进行了非法询问、超出询问次数限制,或在上一组测试数据中给出了错误答案。你的程序必须立即终止,否则会收到 Wrong Answer 判定。否则,你的程序会继续从已关闭的流中读取,可能得到任意判定。 每次输出询问或答案后,不要忘记输出换行并刷新输出缓冲区。否则会收到 Idleness limit exceeded 判定。具体做法如下: - C++:fflush(stdout) 或 cout.flush() - Java:System.out.flush() - Pascal:flush(output) - Python:stdout.flush() - 其它语言请查阅相关文档。

输出格式

见上文交互说明。

说明/提示

在第一个测试点中,交互过程如下: 有 1 组测试数据。 3 1 树 $T$ 有 $3$ 个节点,Alice 只玩一轮。 1 2 第一条边 2 3 第二条边 1 2 3 排列 $p_1$ 2 1 3 排列 $p_2$ Alice 在唯一一轮前将 $a$ 洗牌为 $a=[0,2,1]$。 2 3 本轮询问的节点 ? 1 2 3 $\min(a_{p_{1,2}},a_{p_{1,3}})=\min(a_2,a_3)=1$ ? 2 1 3 $\min(a_{p_{2,1}},a_{p_{2,2}},a_{p_{2,3}})=\min(a_2,a_1,a_3)=0$ ! 0 1 结合询问的输出可知,$\operatorname{MEX}$ 为 $0$。由于输出正确,评测返回 $1$。 每组测试数据结束后,记得读入 $1$ 或 $-1$。 由 ChatGPT 4.1 翻译