QOJ.ac

QOJ

実行時間制限: 1.0 s メモリ制限: 1024 MB 満点: 100 インタラクティブ ハック可能 ✓

#15314. ¡Menji, te echamos de menos!

統計

Este es un problema interactivo.

Menji se ha perdido y todo el mundo lo echa de menos. ¡Tu trabajo es encontrarlo!

Hay un árbol binario $T$ que consta de $n$ vértices, y cada arista del árbol $T$ tiene longitud $1$. Menji está escondido en el vértice $X$. Conoces la estructura del árbol; sin embargo, no conoces $X$.

Para encontrar $X$, puedes enviar señales. Puedes elegir un vértice $u$ y una intensidad de señal $k$, y luego enviar una señal de intensidad $k$ desde el vértice $u$. Si la distancia entre $u$ y $X$ no es mayor que $k$, Menji recibirá la señal y enviará una señal de vuelta, y tú la recibirás. De lo contrario, no recibirás nada.

Enviar señales es lento y tienes prisa, así que determina la posición de Menji en no más de $40$ señales.

Protocolo de interacción

La entrada contiene múltiples casos de prueba. La primera línea de la entrada contiene un entero $T$ ($1 \le T \le 100$), el número de casos de prueba.

Para cada caso de prueba, la primera línea contiene un entero $n$ ($2 \le n \le 3 \times 10^4$), el número de vértices en el árbol.

La segunda línea contiene $n - 1$ enteros $fa_2, fa_3, \dots, fa_n$ ($1 \le fa_i < i$), donde $fa_i$ es el padre de $i$ en el árbol. El árbol tiene su raíz en el vértice $1$.

Se garantiza que el árbol es un árbol binario, es decir, no existen $1 < i < j < k \le n$ tales que $fa_i = fa_j = fa_k$.

Para enviar una señal, imprime una sola línea con el siguiente formato:

  • ? u k: Indica que creas una señal en el vértice $u$ con intensidad $k$. Debes asegurarte de que $1 \le u \le n, 0 \le k \le n$. Luego debes leer un entero $o$ ($o \in \{0, 1\}$). Si recibiste la señal, o equivalentemente $dis(u, X) \le k$, entonces $o = 1$; en caso contrario, $o = 0$.

Para informar la respuesta, imprime una sola línea con el siguiente formato:

  • ! u: Indica que has encontrado $X = u$. Debes pasar al siguiente caso de prueba después de imprimir esto, o terminar si ya no hay más.

Para cada caso de prueba, puedes enviar como máximo $40$ señales. Informar la respuesta no cuenta como enviar una señal.

Si envías más de $40$ señales, o la señal enviada tiene un formato incorrecto, o la respuesta informada es incorrecta, la interacción terminará y recibirás el veredicto Wrong answer.

Ten en cuenta que el interactor es adaptativo, lo que significa que la respuesta puede cambiar dependiendo de tus consultas siempre que siga siendo consistente con las restricciones y con las respuestas a las consultas anteriores.

Se garantiza que la suma de $n$ en todos los casos de prueba no supera $3 \times 10^4$.

Después de imprimir cada línea, no olvides imprimir el salto de línea y vaciar el flujo de salida (flush). Puedes usar fflush(stdout) o cout.flush() en C++, System.out.flush() en Java y stdout.flush() en Python.

Ejemplo

Entrada de ejemplo 1

2
7
1 1 2 2 3 3

1

0

0

7
1 1 2 2 3 3

0

1

Salida de ejemplo 1

? 2 1

? 3 2

? 4 0

! 5

? 2 1

? 3 0

! 3

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.