QOJ.ac

QOJ

Limite de temps : 1.0 s Limite de mémoire : 256 MB Points totaux : 100 Hackable ✓

#15424. Sopa de tortuga

Statistiques

Descripción

Una empresa consta de $n$ miembros con identificadores de empleado $1, 2, \dots, n$. El miembro $1$ es el jefe, y cada uno de los demás miembros $i$ ($2 \le i \le n$) tiene un supervisor directo $f_i$ ($1 \le f_i < i$). La estructura de la empresa forma un árbol con raíz con el miembro $1$ en la raíz.

En esta empresa, el miembro $a$ conoce al miembro $b$ si y solo si se cumple al menos una de las siguientes condiciones:

  • $a = b$.
  • $b$ es un ancestro de $a$. En otras palabras, existe una secuencia $u_1, u_2, \dots, u_k$ ($2 \le k$) tal que $u_1 = a$, $u_k = b$, y $u_i = f_{u_{i-1}}$ para todo $2 \le i \le k$.
  • $b$ es un hijo directo de $a$ ($b$ es un subordinado directo de $a$). En otras palabras, $f_b = a$.

Ten en cuenta que la relación de conocerse no es necesariamente simétrica; que $a$ conozca a $b$ no implica que $b$ conozca a $a$.

Ahora, los miembros están jugando a un juego. En cada ronda, un miembro específico $m$ actúa como el adivinador, y otro miembro $p$ es el objetivo. Se garantiza que $p$ es un miembro a quien $m$ no conoce.

Para identificar a $p$, $m$ hace una secuencia de preguntas. En cada pregunta, $m$ elige un identificador $x$ y pregunta: «¿Conoce $p$ al miembro $x$?». El miembro $p$ siempre responde con la verdad. Además, si $x = p$, $p$ revelará específicamente que es el miembro $x$, momento en el cual termina el juego.

Cada pregunta conlleva un costo de desplazamiento basado en el árbol de la empresa. Si la $i$-ésima pregunta se refiere al miembro $x_i$, el costo de esa pregunta es $dis(x_{i-1}, x_i)$, donde $dis(a, b)$ es el número de aristas en el único camino entre $a$ y $b$ en el árbol. Para la primera pregunta ($i = 1$), el costo es $dis(m, x_1)$.

El miembro $m$ es extremadamente inteligente y utiliza una estrategia óptima para minimizar el costo total requerido para garantizar la finalización del juego en el peor de los casos. Tu tarea es calcular este costo mínimo en el peor de los casos para cada posible adivinador $m \in \{1, 2, \dots, n\}$.

Si un miembro $m$ ya conoce a todos en la empresa, la respuesta para ese $m$ es $0$.

Entrada

La primera línea de la entrada contiene un entero $n$ ($1 \le n \le 10^5$), que representa el número total de miembros de la empresa.

La segunda línea contiene $n - 1$ enteros, que representan $f_2, f_3, \dots, f_n$. Se cumple que $1 \le f_i < i$.

Salida

Imprime una sola línea que contenga $n$ enteros, representando las respuestas para los casos en los que $m = 1, m = 2, \dots, m = n$. Los enteros deben estar separados por espacios.

Ejemplos

Entrada de ejemplo 1

3
1 1

Salida de ejemplo 1

0 2 2

Entrada de ejemplo 2

5
1 1 3 2

Salida de ejemplo 2

4 3 3 4 4

Entrada de ejemplo 3

6
1 1 2 2 3

Salida de ejemplo 3

4 3 5 4 4 6

Nota

Para explicar el caso de $m = 4$ en el ejemplo 3: Primero, como se muestra en el diagrama, el miembro $m$ no conoce a los miembros $\{3, 5, 6\}$. Una posible estrategia óptima es preguntar primero si el miembro $2$ es conocido por $p$, con un costo de $1$. De ser así, esto indica que $p = 5$, y el siguiente paso es preguntar por el miembro $5$ para terminar el juego, con un costo total de $2$. En caso contrario, se continúa preguntando si el miembro $3$ es conocido por $p$, con un costo de $2$. Si $p = 3$, el juego termina con un costo total de $3$. De lo contrario, esto indica que $p = 6$, y el siguiente paso cuesta $1$ para preguntar por el miembro $6$, terminando el juego con un costo total de $4$. Por lo tanto, esta estrategia requiere un costo en el peor de los casos de $4$. Se puede demostrar que ninguna otra estrategia puede reducir aún más el costo de consulta en el peor de los casos.

Diagrama

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.