CF2215C Oriented Journey

题目背景

- 这是一个通信题。 - 本题不允许 Hack。

题目描述

游戏有两位玩家:玩家 A(Neri)和玩家 B(Mashiro)。裁判会先和玩家 A 交互,玩家 A 结束后,裁判再和玩家 B 交互。注意,玩家 A 和玩家 B 之间不能直接传递信息;他们只能和裁判单向通信,但可以事先商量好交流策略。 在交互开始前,裁判会确定一个大小为 $n$ 的无向树 $T$ 和一个整数 $s$(满足 $1 \le s \le 2^{n-1}$)。这两个值对两位玩家都是一样的。 玩家 A(Neri)首先从裁判那里拿到两个整数 $n$ 和 $s$,但对树 $T$ 一无所知。接下来,裁判会和 Neri 交互 $n-1$ 轮,每轮交互: - 裁判会告诉 Neri 树 $T$ 中的一条无向边,Neri 必须 **立刻** 给这条边指定一个方向。 注意,经过这 $n-1$ 轮交互后,树 $T$ 的所有边都被赋予了方向,形成一棵新的有向树 $T'$。 玩家 B(Mashiro)收到这个有向树 $T'$,她的任务是根据这棵树判断出整数 $s$。 Neri 的目标是确保 Mashiro 能正确推断出 $s$。你的任务是扮演两位玩家,设计一套最优的交互策略,让 Mashiro 能准确地确定 $s$。 ## 第一次运行 你的程序会对每个测试点运行两次。第一次运行时,你是玩家 A(Neri)。 ### 输入格式 第一行包含两个整数 $t$ 和 $q$($1 \le t \le 10^4$,$q=1$)——测试点数量和运行次数。这里给出 $q=1$ 是为了让程序知道这是第一次运行,应扮演玩家 A(Neri)。 每个测试点,先读入两个整数 $n$ 和 $s$($3\le n \le 30$,$1\le s \le 2^{n-1}$)——树的大小和要传递的整数。 ### 交互规则 对于每个测试点,你先从输入读入 $n$ 和 $s$。然后,需要和裁判交互 $n-1$ 轮: - 先从裁判读入两个整数 $u$ 和 $v$($1\le u < v\le n$),表示树 $T$ 中有条无向边 $(u,v)$; - 接着,输出两个整数 $a$ 和 $b$,用空格隔开,表示你给这条边指定的方向。$(a,b)$ 要么是 $(u,v)$,要么是 $(v,u)$。输出 $(a,b)=(u,v)$ 表示方向是 $u \rightarrow v$,输出 $(a,b)=(v,u)$ 表示方向是 $v \rightarrow u$。 注意,你必须在得到下一条边的信息之前,**立刻**给当前边定向。 完成所有测试点后,程序结束。 交互器是 **非自适应的**,也就是说每个测试点的树 $T$ 在交互开始前就固定好了。 每轮交互结束后,别忘了换行并刷新输出,否则会因为“空闲时间超限”判错。 如果在任何交互步骤读到 $-1$,说明交互出错,你的程序必须立刻退出。否则会因为继续读关闭的流导致不可预料的判决。 ## 第二次运行 第二次运行时,你是玩家 B(Mashiro)。 ### 输入格式 第一行包含两个整数 $t$ 和 $q$($1\le t\le 10^4$,$q=2$)——测试点数量和运行次数。这里给出 $q=2$ 是为了让程序知道这是第二次运行,应扮演玩家 B(Mashiro)。 每个测试点的第一行包含一个整数 $n$($3\le n \le 30$)——树的大小。 接着有 $n-1$ 行,每行两个整数 $u$ 和 $v$($1\le u,v\le n$),表示树 $T'$ 中有条有向边 $u \rightarrow v$。 注意,第二次运行的测试点顺序可能被 **打乱**。具体请看示例。 ### 输出格式 每个测试点输出一个整数 $s$——你根据有向树 $T'$ 推断出的整数。 输出后别忘了换行并刷新输出,否则会因“空闲时间超限”判错。然后处理下一个测试点,或者结束程序。

输入格式

无

输出格式

无

说明/提示

### 样例解释 第一轮示例:Neri 收到的 $s$ 分别为 $s=21$ 和 $s=59$。根据两方约定的策略,Neri 对树进行了定向。 ![第一组测试用例的 $T'$](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2215C/190eff138c69099398f377f19074b043c477515ac3fcf3f54c823d86574dae56.png) 第二轮示例:请注意两轮的测试用例顺序可能被重排。可参考下列 $T'$ 的可视化图示: ![第二组测试用例的 $T'$](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2215C/058357c767a25d2d2c45eeec0cbe768ba69860a83afb2ccbddd46dae42f8ffbd.png) ### 测试工具 你可以使用命令行工具在本地进行测试。具体下载方式请见题目所附材料。 使用该工具需安装 Python。在终端使用如下命令启动: - Windows:`python treedir_testing_tool.py [–quiet] ` - Linux:`python3 treedir_testing_tool.py [–quiet] ` **参数介绍**: - `-q`, `–quiet` :该参数可选,加上后测试工具不会打印交互日志。 - `data_file` :是你准备的数据文件,需满足如下格式: - 第一行两个整数 $t$ 和 $s$ 表示测试用例数量和用于随机打乱顺序的种子,$s=0$ 表示不打乱。 - 每组用例第一行 $n, s$,随后 $n-1$ 行每行 $u, v$,表示一条树边。 - `program` :你的已编译程序文件名。 - `arguments` :为你的程序所需参数。 工具命令最上方有详细说明。 **注意事项**: - 工具并非与评测机完全一致,判罚可能略有不同。 - 工具会检查文件格式,但不会校验输入是否满足题目限制。 - 工具不会检测你的时间/空间消耗限制。 --- (注:题目描述中的所有 LaTeX 数学公式、代码及格式已完整保留,未做更改。) 由 ChatGPT 5 翻译