CF1979F.Kostyanych's Theorem

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是一个交互题。

Kostyanych 选择了一个有 nn 个顶点的完全无向图 †^{\dagger},然后从中恰好删除了 (n−2)(n-2) 条边。你可以进行如下类型的查询:

  • "? dd" —— Kostyanych 会告诉你一个度数至少为 dd 的顶点 vv 的编号。在所有满足条件的顶点中,他会选择度数最小的那个,如果有多个,则选择编号最小的那个。他还会告诉你图中另一个与 vv 没有边相连的顶点的编号(如果没有这样的顶点,则返回 00)。在所有可能的顶点中,他选择编号最小的那个。然后他会移除顶点 vv 及其所有相连的边。如果没有找到满足条件的顶点 vv,则返回 "0 0"。

请在最多 nn 次查询内,找出原图中的一条哈密顿路径 ‡^{\ddagger}。可以证明,在上述约束下,原图一定存在哈密顿路径。

†^{\dagger} 完全无向图是指任意两个不同顶点之间恰好有一条无向边的图。因此,nn 个顶点的完全无向图有 n(n−1)2\frac{n(n-1)}{2} 条边。

‡^{\ddagger} 哈密顿路径是指经过图中每个顶点恰好一次的一条路径。

输入格式

每个测试包含多个测试用例。第一行包含一个整数 tt(1≤t≤10001 \le t \le 1000)——表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的唯一一行包含一个整数 nn(2≤n≤1052 \le n \le 10^5)——表示图中顶点的数量。

保证所有测试用例中 nn 的总和不超过 10510^5。

输出格式

每个测试用例的交互从读取整数 nn 开始。

然后你最多可以进行 nn 次查询。

每次查询,输出一行,格式为 "? dd"(不含引号)(0≤d≤n−10 \le d \le n-1)。每次查询后,读取两个整数,作为该查询的回答。

当你准备好输出答案时,输出一行,格式为 "! v1 v2…vnv_1\ v_2 \ldots v_n"(不含引号)——表示哈密顿路径上顶点的顺序。输出答案不计入 nn 次查询次数。完成一个测试用例后,程序应立即进入下一个测试用例。所有测试用例完成后,程序应立即终止。

如果某个测试用例中查询次数超过 nn 次,或查询格式不正确,则该查询的返回值为 −1-1,收到该返回值后,你的程序应立即终止以获得 Wrong answer 判定。否则,可能会收到其他判定。

每次输出查询后,别忘了输出换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 判定。具体方法如下:

  • C++:fflush(stdout) 或 cout.flush()
  • Java:System.out.flush()
  • Pascal:flush(output)
  • Python:stdout.flush()
  • 其它语言请查阅相关文档。

交互器是非自适应的。图在交互过程中不会发生变化。

Hack 格式

Hack 时请使用如下格式:

第一行包含一个整数 tt(1≤t≤10001 \le t \le 1000)——表示测试用例数量。

每个测试用例的唯一一行包含一个整数 nn(2≤n≤1052 \le n \le 10^5)——表示图中顶点数量。

接下来的 (n−2)(n-2) 行,每行包含两个整数 uu 和 vv(1≤u,v≤n1 \le u, v \le n,u≠vu \ne v)——表示被删除的边的两个端点。每条边最多只能出现一次。

所有测试用例中 nn 的总和不超过 10510^5。

输入输出样例

  • 输入#1

    3
    4
    
    0 0
    
    1 4
    
    2 3
    
    4
    
    1 0
    
    4 2
    
    2
    
    1 0

    输出#1

    ? 3
    
    ? 2
    
    ? 1
    
    ! 4 3 1 2
    
    ? 3
    
    ? 0
    
    ! 4 1 2 3
    
    ? 0
    
    ! 2 1

说明/提示

在第一个测试用例中,原图如下所示:

考虑如下查询:

  • 图中没有度数至少为 33 的顶点,因此返回 "0 0"。
  • 有四个顶点度数至少为 22,且它们的度数都恰好为 22:11、22、33、44。返回顶点 11(编号最小),以及与 11 不相连的顶点 44(唯一一个)。然后移除顶点 11。
  • 剩下三个顶点度数至少为 11,其中 22 和 33 的度数最小(为 11,44 的度数为 22)。返回顶点 22(编号最小),以及与 22 不相连的顶点 33(唯一一个)。然后移除顶点 22。

路径 4−3−1−24-3-1-2 是一条哈密顿路径。

在第二个测试用例中,原图如下所示:

考虑如下查询:

  • 顶点 11 的度数至少为 33,但它与所有顶点都相连,因此返回 "1 0"。然后移除顶点 11。
  • 剩下的顶点 22、33、44 的度数至少为 00,其中 44 的度数最小(为 00,22 和 33 的度数为 11)。44 与 22 和 33 都不相连,因此返回 22(编号最小)。然后移除顶点 44。

路径 4−1−2−34-1-2-3 是一条哈密顿路径。

在第三个测试用例中,图由 22 个顶点和一条边组成。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页