QOJ.ac

QOJ

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

#4218. Grafo oculto

Statistics

Existe un grafo simple no dirigido con $n$ vértices. Este grafo tiene una propiedad adicional:

  • Cualquier subgrafo inducido contiene un vértice con un grado de a lo sumo $k$.

Debes encontrar este grafo oculto. Puedes verificar para cualquier subconjunto si es un conjunto independiente. Si no lo es, te mostraremos una arista con ambos extremos dentro de este conjunto.

No cambiaremos el grafo durante la interacción, por lo que puedes asumir que es fijo. Sin embargo, podemos elegir cualquier arista dentro del subgrafo inducido para mostrarla. En otras palabras, en todas las pruebas, el grafo es fijo, pero el interactor es adaptativo.

Debes adivinar el grafo en un máximo de $2nk + n$ consultas.

Interacción

La interacción comienza con una línea que contiene un entero $n$: el número de vértices en el grafo oculto ($2 \le n \le 2000$).

El entero $k$ no se proporciona, pero satisface la restricción $1 \le k < n$, $nk \le 2000$.

Después de esto, puedes realizar consultas.

Para realizar una consulta, imprime una línea que contenga "? $k$" ($1 \le k \le n$) y luego $k$ enteros distintos $v_1, v_2, \dots, v_k$ ($1 \le v_i \le n$). Separa los enteros consecutivos con espacios simples. Luego, limpia (flush) la salida.

Después de cada consulta, lee una línea con dos enteros $i, j$. Si no hay aristas en el subgrafo inducido por $v_1, v_2, \dots, v_k$, entonces $i = j = -1$; de lo contrario, $i \neq j$, $i \in \{v_1, \dots, v_k\}$, $j \in \{v_1, \dots, v_k\}$, y existe una arista con extremos $i$ y $j$ en el grafo.

Cuando encuentres el grafo, imprime en la primera línea "! $m$". Las siguientes $m$ líneas deben contener la descripción de las aristas del grafo, cada una de las cuales debe contener dos enteros $u, v$ ($1 \le u, v \le n$), que denotan los índices de los vértices conectados por una arista.

Tu solución obtendrá Wrong Answer o Time Limit Exceeded si realizas más de $2nk + n$ consultas.

Tu solución obtendrá Idleness Limit Exceeded si no imprimes nada o si olvidas limpiar la salida.

Para limpiar la salida, debes hacer lo siguiente inmediatamente después de imprimir una consulta y un salto de línea:

  • fflush(stdout) o cout.flush() en C++;
  • System.out.flush() en Java;
  • flush(output) en Pascal;
  • stdout.flush() en Python;
  • consulta la documentación para otros lenguajes.

Ejemplos

Entrada 1

3
1 2
2 3
-1 -1

Salida 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.