QOJ.ac

QOJ

Süre Sınırı: 1.0 s Bellek Sınırı: 256 MB Toplam puan: 100 Hack'lenebilir ✓

#15424. Schildkrötensuppe

İstatistikler

Beschreibung

Ein Unternehmen besteht aus $n$ Mitgliedern mit den Mitarbeiter-IDs $1, 2, \dots, n$. Mitglied $1$ ist der Chef, und jedes andere Mitglied $i$ ($2 \le i \le n$) hat einen direkten Vorgesetzten $f_i$ ($1 \le f_i < i$). Die Unternehmensstruktur bildet einen Wurzelbaum mit Mitglied $1$ als Wurzel.

In diesem Unternehmen kennt Mitglied $a$ Mitglied $b$ genau dann, wenn mindestens eine der folgenden Bedingungen erfüllt ist:

  • $a = b$.
  • $b$ ist ein Vorfahre von $a$. Mit anderen Worten, es existiert eine Folge $u_1, u_2, \dots, u_k$ ($2 \le k$), sodass $u_1 = a$, $u_k = b$ und $u_i = f_{u_{i-1}}$ für alle $2 \le i \le k$ gilt.
  • $b$ ist ein direktes Kind von $a$ ($b$ ist ein direkter Untergebener von $a$). Mit anderen Worten, $f_b = a$.

Beachte, dass die Bekanntschaftsbeziehung nicht unbedingt symmetrisch ist; dass $a$ Mitglied $b$ kennt, bedeutet nicht zwangsläufig, dass $b$ auch $a$ kennt.

Nun spielen die Mitglieder ein Spiel. In jeder Runde agiert ein bestimmtes Mitglied $m$ als Ratender, und ein anderes Mitglied $p$ ist das Ziel. Es wird garantiert, dass $p$ ein Mitglied ist, das $m$ nicht kennt.

Um $p$ zu identifizieren, stellt $m$ eine Reihe von Fragen. Bei jeder Frage wählt $m$ eine ID $x$ und fragt: „Kennt $p$ das Mitglied $x$?“ Mitglied $p$ antwortet immer wahrheitsgemäß. Wenn außerdem $x = p$ gilt, gibt $p$ ausdrücklich preis, dass es selbst Mitglied $x$ ist, woraufhin das Spiel endet.

Jede Frage verursacht Reisekosten basierend auf dem Unternehmensbaum. Wenn sich die $i$-te Frage auf Mitglied $x_i$ bezieht, betragen die Kosten dieser Frage $dis(x_{i-1}, x_i)$, wobei $dis(a, b)$ die Anzahl der Kanten auf dem eindeutigen Pfad zwischen $a$ und $b$ im Baum ist. Für die erste Frage ($i = 1$) betragen die Kosten $dis(m, x_1)$.

Mitglied $m$ ist äußerst klug und verwendet eine optimale Strategie, um die Gesamtkosten zu minimieren, die erforderlich sind, um den Abschluss des Spiels im schlimmsten Fall (Worst Case) zu garantieren. Deine Aufgabe ist es, diese minimalen Worst-Case-Kosten für jeden möglichen Ratenden $m \in \{1, 2, \dots, n\}$ zu berechnen.

Wenn ein Mitglied $m$ bereits jeden im Unternehmen kennt, ist die Antwort für dieses $m$ gleich $0$.

Eingabe

Die erste Zeile der Eingabe enthält eine ganze Zahl $n$ ($1 \le n \le 10^5$), die die Gesamtzahl der Mitglieder im Unternehmen darstellt.

Die zweite Zeile enthält $n - 1$ ganze Zahlen, die $f_2, f_3, \dots, f_n$ darstellen. Es gilt $1 \le f_i < i$.

Ausgabe

Gib eine einzige Zeile mit $n$ ganzen Zahlen aus, die die Antworten für die Fälle $m = 1, m = 2, \dots, m = n$ darstellen. Die ganzen Zahlen sollten durch Leerzeichen getrennt sein.

Beispiele

Beispieleingabe 1

3
1 1

Beispielausgabe 1

0 2 2

Beispieleingabe 2

5
1 1 3 2

Beispielausgabe 2

4 3 3 4 4

Beispieleingabe 3

6
1 1 2 2 3

Beispielausgabe 3

4 3 5 4 4 6

Hinweis

Zur Erklärung des Falls $m = 4$ in Beispiel 3: Zunächst kennt Mitglied $m$, wie im Diagramm gezeigt, die Mitglieder $\{3, 5, 6\}$ nicht. Eine mögliche optimale Strategie besteht darin, zuerst zu fragen, ob Mitglied $2$ von $p$ gekannt wird, was $1$ kostet. Falls ja, bedeutet dies $p = 5$, und der nächste Schritt besteht darin, nach Mitglied $5$ zu fragen, um das Spiel mit Gesamtkosten von $2$ zu beenden. Andernfalls fragt man weiter, ob Mitglied $3$ von $p$ gekannt wird, was $2$ kostet. Wenn $p = 3$ ist, endet das Spiel mit Gesamtkosten von $3$. Andernfalls bedeutet dies $p = 6$, und der nächste Schritt kostet $1$, um nach Mitglied $6$ zu fragen, womit das Spiel mit Gesamtkosten von $4$ endet. Daher erfordert diese Strategie im schlimmsten Fall Kosten von $4$. Es lässt sich beweisen, dass keine andere Strategie die Fragekosten im schlimmsten Fall weiter senken kann.

Diagramm

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.