luogu#P16361. [BalticOI 2026] Hamilton
[BalticOI 2026] Hamilton
题目描述
考虑一个包含 个节点的有向图,节点编号为 。如果对于每一对不同的节点,两个方向中恰好存在一条有向边,则称该图为一张竞赛图。也就是说,对于任意两个不同节点 和 ,要么存在从 到 的边,要么存在从 到 的边。
一条哈密顿回路是一个序列 ,它沿着图中的边访问所有节点并最终回到起点。对于所有 ,必须存在从 到 的边;此外,还必须存在从 到 的边。
你可以自由构造一张 个节点的竞赛图。随后,节点的编号会被随机打乱。通过针对打乱后图中的边的方向进行询问,你能否找到一条哈密顿回路?
交互方式
本题为交互题。首先读入两个整数 和 :分别表示节点数与测试数据组数。
接下来,输出 行来描述竞赛图。在第 行中输出 个字符 "0" 或 "1"。位置 上的字符 "1" 表示存在一条从 到 的边。从节点到自身的边不应存在。
随后会进行 组测试。每组测试均使用你提供的同一张图,但节点编号会被打乱并对你的程序保密。你可以进行若干次询问,之后需要给出一个哈密顿回路。
若要发起询问,请输出 "? ",其中 是打乱后的图中的两个不同节点。交互库会回复 ">" 表示存在从 到 的边,或 "<" 表示存在从 到 的边。
当你找到一条哈密顿回路后,请输出 "!",后跟 个整数 。注意这些整数 应遵循打乱后的节点编号。在你输出答案后,下一组测试将立即开始。
你可以在此处下载测试脚本。脚本的开头包含了使用说明。
5 2
>
>
>
>
>
<
>
>
<
>
01110
00101
00010
01001
10100
? 1 2
? 2 3
? 3 4
? 4 5
? 5 1
! 1 2 3 4 5
? 1 2
? 1 5
? 4 3
? 4 5
? 3 2
! 1 5 4 3 2
提示
解释
在第一组测试数据中,打乱后的编号恰好与原编号一致,因此 就是一条哈密顿回路。
在第二组测试数据中,节点编号 依次被随机打乱为 。序列 确实是一条哈密顿回路,因为它在原图中对应于 。
下图中,左图为原图,右图为第二组测试数据中打乱后的图。两条哈密顿回路以红色高亮标注。
:::align{center}
:::
数据范围
评分
每个子任务中仅有一个测试输入,包含 组测试数据。在每组测试数据中,图的节点编号会被均匀随机地打乱。在单组测试数据中发起超过 次询问将导致判决为 WRONG ANSWER。
设 为你的程序在某一子任务所有测试数据中询问次数的平均值。若 不超过指定限制,你将获得该子任务的分数。
| 子任务 | 约束条件 | 分值 |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 |
在子任务 4 中,你的得分根据以下公式计算:
$$\left\lfloor \frac {25\,000} {\max(750, Q) - 500} - 24 \right\rfloor$$例如,如果你的程序平均询问次数为 ,你将从此子任务获得 1 分;若 ,获得 26 分;若 ,获得 76 分。
翻译由 DeepSeek V4 Pro 完成