筑波大学プログラミングコンテスト2023
コンテスト日時
2023/09/03 (Su) 14:00 - 17:00

F - The Edge of Edges

Benihuki
2
s
1024
MB
500

問題文

NN 頂点からなる木が与えられます。頂点 ii は、頂点 AiA_i に接続しています。

f(x)f(x) を、「頂点 xx から深さ優先探索を始めたときに、最後に訪れることになる頂点」と定義します。

すべての i (1iN)i\ (1 \leq i \leq N) について f(i)f(i) を求めてください。

f(x)f(x) の厳密な定義

数列 E(x),S=()E \coloneqq (x), S = () とする。以下を繰り返す。

E=(y,)E = (y, \dots ) の場合]

  • EE から yy を取り除く。
  • yy に接続する頂点のうち、SS に含まれない頂点を C=c1,c2,,cnC=c_1, c_2, \dots, c_n とする。
  • CC昇順に 並び替えて、EE の先頭に追加する。
  • SS の末尾に yy を追加する。

E=()E = () の場合]

  • f(x)=Sm (m=S)f(x) = S_m\ (m=|S|) である。繰り返し終了。(制約により SS が空でないことは保証される。)

制約

この問題では、すべてのテストケースについて、以下の制約を満たす。

  • 2N2×1052 \leq N \leq 2 \times 10^5
  • 1AiN (2iN)1 \leq A_i \leq N\ (2 \leq i \leq N)
  • Aii (2iN)A_i \neq i\ (2 \leq i \leq N)
  • 与えられるグラフは木である。

部分点

この問題には、部分点が設定されている。
N300N \leq 300 のテストケースにすべて正解すると、100100 点が与えられる。
N2000N \leq 2000 のテストケースにすべて正解すると、追加で 100100 点が与えられる。

入力

入力は、以下の形式で標準入力から与えられる。

NN
A2A_2 A3A_3 \cdots ANA_N

出力

問題文で指定された方法で計算した f(x)f(x) について、

f(1)f(1) f(2)f(2) \cdots f(N)f(N)

の形で出力せよ。

入力例 1
6 1 2 3 2 3
出力例 1
5 5 6 6 6 4

頂点 44 から始めると、SS の要素は最終的に (4,3,2,1,5,6)(4, 3, 2, 1, 5, 6) となります。よって、f(4)=6f(4)=6 です。