QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 512 MB Total points: 100 Difficulty: [show] Interactive

#4218. 숨겨진 그래프

Statistics

$n$개의 정점을 가진 단순 무향 그래프가 있다. 이 그래프는 다음과 같은 추가적인 성질을 만족한다.

  • 모든 유도 부분 그래프(induced subgraph)는 차수가 $k$ 이하인 정점을 적어도 하나 포함한다.

당신은 이 숨겨진 그래프를 찾아야 한다. 임의의 부분 집합에 대해 독립 집합(independent set)인지 확인할 수 있다. 만약 독립 집합이 아니라면, 해당 부분 집합 내의 두 끝점을 포함하는 간선을 알려줄 것이다.

상호작용 중에 그래프는 변하지 않으므로, 그래프는 고정되어 있다고 가정해도 좋다. 하지만 유도 부분 그래프 내의 어떤 간선을 보여줄지는 우리가 선택할 수 있다. 즉, 모든 테스트 케이스에서 그래프는 고정되어 있지만, 인터랙터는 적응형(adaptive)이다.

당신은 최대 $2nk + n$번의 질의 내에 그래프를 추측해야 한다.

인터랙션

상호작용은 숨겨진 그래프의 정점 수 $n$ ($2 \le n \le 2000$)을 포함하는 한 줄로 시작한다.

정수 $k$는 주어지지 않지만, $1 \le k < n$ 및 $nk \le 2000$이라는 제약을 만족한다.

그 후, 질의를 수행할 수 있다. 질의를 하려면 "? $m$" ($1 \le m \le n$)과 $m$개의 서로 다른 정수 $v_1, v_2, \dots, v_m$ ($1 \le v_i \le n$)을 한 줄에 출력한다. 연속된 정수는 공백으로 구분한다. 그 후 출력을 flush 해야 한다.

각 질의 후, 두 정수 $i, j$를 읽는다. 유도 부분 그래프 $v_1, v_2, \dots, v_m$ 내에 간선이 없으면 $i = j = -1$이다. 그렇지 않으면 $i \neq j, i \in \{v_1, \dots, v_m\}, j \in \{v_1, \dots, v_m\}$이며, 그래프 내에 $i$와 $j$를 잇는 간선이 존재한다.

그래프를 찾으면, 첫 줄에 "! $m$"을 출력한다. 그 다음 $m$줄에는 그래프의 간선 정보를 출력하며, 각 줄은 간선으로 연결된 두 정점의 인덱스 $u, v$ ($1 \le u, v \le n$)를 포함해야 한다.

$2nk + n$번보다 많은 질의를 수행하면 Wrong Answer 또는 Time Limit Exceeded를 받게 된다. 아무것도 출력하지 않거나 출력을 flush 하는 것을 잊으면 Idleness Limit Exceeded를 받게 된다.

질의와 줄 바꿈을 출력한 직후에 다음을 수행하여 flush 해야 한다:

  • C++의 경우 fflush(stdout) 또는 cout.flush();
  • Java의 경우 System.out.flush();
  • Pascal의 경우 flush(output);
  • Python의 경우 stdout.flush();
  • 다른 언어는 해당 언어의 문서를 참조하십시오.

예제

입력 1

3
1 2
2 3
1 3

출력 1

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

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#1012EditorialOpen题解Qiuly2026-02-14 01:41:30View

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.