QOJ.ac

QOJ

时间限制: 2.0 s 内存限制: 1024 MB 总分: 100 难度: [显示] 交互 可 Hack ✓

#18123. 这是一个问题吗?

统计

当然,这是一个问题。

这是一个交互式问题。给你一个含有 $n$ 个顶点和 $m$ 条边的未知无向图,图中没有重边或自环。每次你可以向交互库提出以下问题:

  • 给定一个顶点集合 $S \subseteq \{1, 2, \dots, n\}$,询问该顶点集合是否是一个独立集。

这里,独立集意味着集合 $S$ 中任意两个不同的顶点之间都没有边相连。

你的目标是使用不超过 $M = n + m(2 + \lceil\log_2 n\rceil)$ 次询问来确定该图的整个边集。

请注意,你事先并不知道 $m$ 的值,且交互库是自适应的(adaptive),即图在开始时并不是固定的,而是会根据你的询问动态调整。

输入格式

第一行包含一个整数 $T$ ($1 \le T \le 100$),表示测试用例的数量。

对于每个测试用例,一行包含一个整数 $n$ ($1 \le n \le 500$),表示该未知无向图的顶点数。

保证所有测试用例中 $n$ 的总和不超过 $500$,$0 \le m \le 500$,且 $m$ 的总和不超过 $500$。

交互

当你需要进行询问时,输出一行:

? k v_1 v_2 ... v_k

其中 $k$ 表示顶点集合的大小,$v_1, v_2, \dots, v_k$ 是你所询问的集合中的顶点编号,它们两两不同。

交互库将返回一个整数:如果该顶点集合是独立集,则返回 $1$;否则返回 $0$。

当你确定了图中的所有边时,输出一行:

! m u_1 v_1 u_2 v_2 ... u_m v_m

其中 $m$ 是无向图中的边数,$(u_i, v_i)$ 表示图中的一条边。你可以以任意顺序输出这些边。

在此之后,如果没有剩余的测试用例,你的程序必须立即终止;否则,它应该继续处理下一个测试用例。

样例

输入样例 1

1
4
0
1
0
0
1
0

输出样例 1

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

说明

样例展示了逐个询问每条边是否存在的交互过程。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#1842EditorialOpenNew Editorial for Problem #18123wangmarui2026-06-01 15:02:21View

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.