#P14784. [NERC 2025] Cacti Classification
[NERC 2025] Cacti Classification
Description
Ivan 和 Petr 喜欢玩 仙人掌图 —— 这是一种特殊的图,其中每条边最多属于一个简单环,且图是连通的。允许一对顶点之间存在多条边,也允许自环。
他们发明了以下游戏:
- Petr 秘密地构建一个有 个顶点和 条边的仙人掌图。这些边被标记为 到 。
- Petr 只告诉 Ivan 数字 。
- 然后 Ivan 被允许提出以下形式的问题:
- 他选择一个边标签的子集 (关于子集的限制见下文),并问:“如果我们只保留标签在 中的边(以及所有 个顶点),得到的图是否连通?”
- Petr 必须回答 “yes” 或 “no”。
在最多提出 个问题后,Ivan 必须确定每条边:
- 这条边是否位于仙人掌图的某个环上;
- 如果是,该简单环的长度是多少。
在这个问题中,每个自环被视为长度为 的简单环,而同一对顶点之间的两条边构成一个长度为 的简单环。
然而,Ivan 还很年轻,只认识不超过 的数字。因此:
- 如果一条边位于长度不超过 的简单环上,他必须输出该确切长度;
- 如果一条边位于长度大于 的简单环上,他必须说这条边位于一个 大环 上。
此外,为了避免每次列出很多条边,Ivan 总是询问从之前某个查询使用的边集,或从所有边的集合中,恰好移除一条边所得到的边集。
你能设计一个策略让 Ivan 完成这个任务吗?
Input Format
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含 () —— 仙人掌图中边的数量。
保证所有测试用例的 之和不超过 。
交互协议
要提出一个查询,请按以下格式输出一行(不含引号):
? p e(;),其中 是之前某个查询的编号,或为零(查询按提出顺序从 开始编号), 是当前查询之前已提出的查询数量, 是一条边的标签。
该查询表示一个图,由查询编号 中使用的边(如果 则表示所有边)去除边 后组成。交互器检查该图在考虑 所有原始顶点 时是否连通,并返回一个整数:
- 如果查询所表示的图是连通的;
- 如果查询所表示的图不是连通的;
- 如果你超出了 个允许的查询,或者边 已经从查询 使用的边集中被移除了。在这种情况下,你应该终止程序以收到 Wrong Answer 的判定。
当你找到答案时,按以下格式输出一行:
! e_1 e_2 … e_m(对所有 ,),
其中:
- 如果 为正数,则编号为 的边属于一个长度恰好为 的简单环;
- 如果 ,则编号为 的边属于一个 大环(长度大于 的简单环);
- 如果 ,则编号为 的边不属于任何环。
交互器返回一个整数:
- 如果你的答案正确。继续下一个测试用例,或者如果是最后一个用例则终止程序。
- 如果你的答案不正确。在这种情况下,你应该终止程序以收到 Wrong Answer 的判定。
交互器是 非自适应的,这意味着图在你提出任何查询之前就已经固定了。
1
7
0
1
1
1
? 0 1
? 0 3
? 2 4
! -1 3 1 3 2 3 2
Hint
在示例交互中,输入和输出包含空行以使交互器的响应与查询对齐。这些空行在实际的输入和输出中不会出现。
在这个例子中,图有 个顶点和 条边;边 到 ,按顺序依次是 、、、、、、。
:::align{center}
:::
京公网安备 11011102002149号