#P14501. [2026年省队模拟联测]树
[2026年省队模拟联测]树
【题目描述】
这是一道交互题。
现在有一棵树 。
定义点集 的最小覆盖为: 中最小的包含 中所有点的连通块。不难发现这是唯一的。
给定树 的大小 ,你需要实现函数 std::vector<std::pair<int, int> > work(int n) 来还原出这棵树。你只能向交互库提出以下问题,交互库将返回保证正确的回答:
bool ask(std::vector<int> S, int x):对于树上的点集 和点 ,询问 是否在 的最小覆盖中。
注意,本题中树的节点编号从 开始。
【输入格式】
第一行一个正整数 表示树的节点个数。
接下来 行,每行两个正整数 表示在树上两个编号为 的节点之间有一条直接相连的边。
【输出格式】
若你成功返回了正确的树形态,样例交互库将会输出:
Correct! sum |S|=xxx, yyy Queries.
其中 xxx 为你询问的集合大小之和, yyy 为询问次数。
若你进行了一次不正确的询问,样例交互库将会输出以下内容并结束程序:
Wrong Query Format.
若你返回了错误的树形态,样例交互库将会输出以下内容并结束程序:
Wrong Answer.
【数据规模与约定】
| 子任务编号 | 子任务性质 | 子任务分值 |
|---|---|---|
评分方式
本题存在若干个测试点。对于某一个测试点,若你使用的询问次数为 并且在所有询问均合法的情况下返回正确的树形态,则你会获得 $\min\left(\left\lfloor\frac{2.2\times 10^6}{x}\right\rfloor, 100\right)$ 的分数。而如果你的程序发出了不合法的询问,或者返回错误的树形态,你将获得 分。
如何编译运行
将你的答案代码(比如 tree.cpp)和样例交互库 sample_interactive_lib.cpp 放在同一目录下后,使用终端进入该目录,使用命令 g++ tree.cpp sample_interactive_lib.cpp -o run -O2 进行编译后,运行 run.exe 即可。
注意,样例交互库与正式测试的交互库实现不完全一致,但所有的返回值基本一致。