QOJ.ac

QOJ

시간 제한: 1.0 s 메모리 제한: 256 MB 총점: 100 해킹 가능 ✓

#15424. Kilpikonnakeitto

통계

Kuvaus

Yritys koostuu $n$ jäsenestä, joiden työntekijätunnukset ovat $1, 2, \dots, n$. Jäsen $1$ on pomo, ja jokaisella muulla jäsenellä $i$ ($2 \le i \le n$) on suora esihenkilö $f_i$ ($1 \le f_i < i$). Yrityksen rakenne muodostaa juurellisen puun, jonka juurena on jäsen $1$.

Tässä yrityksessä jäsen $a$ tuntee jäsenen $b$ jos ja vain jos vähintään yksi seuraavista ehdoista täyttyy:

  • $a = b$.
  • $b$ on jäsenen $a$ esi-isä. Toisin sanoen on olemassa jono $u_1, u_2, \dots, u_k$ ($2 \le k$) siten, että $u_1 = a$, $u_k = b$ ja $u_i = f_{u_{i-1}}$ kaikilla $2 \le i \le k$.
  • $b$ on jäsenen $a$ suora lapsi ($b$ on jäsenen $a$ suora alainen). Toisin sanoen $f_b = a$.

Huomaa, että tuttavuussuhde ei ole välttämättä symmetrinen; se, että $a$ tuntee jäsenen $b$, ei tarkoita, että $b$ tuntisi jäsenen $a$.

Nyt jäsenet pelaavat peliä. Jokaisella kierroksella tietty jäsen $m$ toimii arvaajana ja toinen jäsen $p$ on kohde. On taattu, että $p$ on jäsen, jota $m$ ei tunne.

Tunnistaakseen jäsenen $p$ jäsen $m$ esittää sarjan kysymyksiä. Jokaisessa kysymyksessä $m$ valitsee tunnuksen $x$ ja kysyy: ”Tunteeko $p$ jäsenen $x$?” Jäsen $p$ vastaa aina totuudenmukaisesti. Lisäksi jos $x = p$, $p$ paljastaa erikseen olevansa jäsen $x$, jolloin peli päättyy.

Jokaiseen kysymykseen liittyy yrityspuuhun perustuva matkakustannus. Jos $i$-s kysymys koskee jäsentä $x_i$, kyseisen kysymyksen kustannus on $dis(x_{i-1}, x_i)$, missä $dis(a, b)$ on solmujen $a$ ja $b$ välisen yksikäsitteisen polun kaarien lukumäärä puussa. Ensimmäisen kysymyksen ($i = 1$) kustannus on $dis(m, x_1)$.

Jäsen $m$ on erittäin älykäs ja käyttää optimaalista strategiaa minimoidakseen kokonaiskustannuksen, joka tarvitaan pelin päättymisen takaamiseen pahimmassa tapauksessa. Tehtäväsi on laskea tämä pahimman tapauksen pienin kustannus jokaiselle mahdolliselle arvaajalle $m \in \{1, 2, \dots, n\}$.

Jos jäsen $m$ tuntee jo kaikki yrityksen jäsenet, vastaus tälle $m$:lle on $0$.

Syöte

Syötteen ensimmäinen rivi sisältää kokonaisluvun $n$ ($1 \le n \le 10^5$), joka esittää yrityksen jäsenten kokonaismäärää.

Toinen rivi sisältää $n - 1$ kokonaislukua, jotka esittävät lukuja $f_2, f_3, \dots, f_n$. Pätee $1 \le f_i < i$.

Tuloste

Tulosta yksi rivi, joka sisältää $n$ kokonaislukua välilyönnein eroteltuina: vastaukset tapauksille $m = 1, m = 2, \dots, m = n$.

Esimerkit

Esimerkkisyöte 1

3
1 1

Esimerkkituloste 1

0 2 2

Esimerkkisyöte 2

5
1 1 3 2

Esimerkkituloste 2

4 3 3 4 4

Esimerkkisyöte 3

6
1 1 2 2 3

Esimerkkituloste 3

4 3 5 4 4 6

Huomautus

Selitetään esimerkin 3 tapaus $m = 4$: Ensinnäkin, kuten kaaviosta näkyy, jäsen $m$ ei tunne jäseniä $\{3, 5, 6\}$. Yksi mahdollinen optimaalinen strategia on kysyä ensin, tunteeko $p$ jäsenen $2$, mikä maksaa $1$. Jos tuntee, se tarkoittaa, että $p = 5$, ja seuraava askel on kysyä jäsenestä $5$ pelin lopettamiseksi, jolloin kokonaiskustannus on $2$. Muussa tapauksessa jatketaan kysymällä, tunteeko $p$ jäsenen $3$, mikä maksaa $2$. Jos $p = 3$, peli päättyy kokonaiskustannuksella $3$. Muussa tapauksessa se tarkoittaa, että $p = 6$, ja seuraava askel maksaa $1$ jäsenestä $6$ kysymiseksi, jolloin peli päättyy kokonaiskustannuksella $4$. Näin ollen tämä strategia vaatii pahimmassa tapauksessa kustannuksen $4$. Voidaan todistaa, ettei mikään muu strategia voi pienentää pahimman tapauksen kyselykustannusta enempää.

Kaavio

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.