atcoder#ARC157E. [ARC157E] XXYX Binary Tree

[ARC157E] XXYX Binary Tree

配点 : 700700

問題文

NN 頂点の根付き木が与えられます. 頂点には 11 から NN の相異なる整数の番号が付いており,根は頂点 11 です. 根以外の各頂点 ii の親は頂点 PiP_i であり,根を含む各頂点は,子を持たないか,ちょうど 2 個の子を持つかのいずれかです.

与えられた木の各頂点に X, Y のいずれかの文字を書き込んで,以下の条件を満たすことが可能かどうかを判定してください.

条件: 木の各辺に関して,両端点に書き込まれた文字を親 PiP_i から子 ii に向かう順に並べて得られる長さ 22 の文字列を考える. そのような文字列はのべ (N1)(N - 1) 個あるが,そのうち

  • ちょうど AA 個が XX
  • ちょうど BB 個が XY
  • ちょうど CC 個が YX であり,
  • YY は存在しない.

TT 個のテストケースが与えられるので,それぞれについて答えてください.

制約

  • T1T \geq 1
  • N1N \geq 1
  • 11 つの入力に含まれるテストケースについて,NN の総和は 10410^4 以下である.
  • A0A \geq 0
  • B0B \geq 0
  • C0C \geq 0
  • A+B+C=N1A + B + C = N - 1
  • 1Pi<i  (2iN)1 \leq P_i < i \ \ (2 \leq i \leq N)
  • 各頂点 k (1kN)k \ (1 \leq k \leq N) は親 Pi (2iN)P_i \ (2 \leq i \leq N) として合計 0 回または 2 回現れる.

入力

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

TT

case1\mathrm{case}_1

case2\mathrm{case}_2

\vdots

caseT\mathrm{case}_T

各テストケース casei (1iT)\mathrm{case}_i \ (1 \leq i \leq T) は以下の形式である.

NN AA BB CC

P2P_2 P3P_3 \cdots PNP_N

出力

TT 行出力せよ. ii 行目には,ii 番目のテストケースについて,条件を満たす文字の書き込み方が存在するなら Yes を,存在しないなら No を出力せよ.

3
7 2 2 2
1 1 2 2 3 3
7 0 2 4
1 1 2 2 3 3
7 2 0 4
1 1 2 2 4 4
Yes
Yes
No

11 番目のテストケースについて,たとえば頂点 11 から 77 の順に XXYXYXX と書き込めば,

  • (1,2)(1, 2) で得られる文字列は XX
  • (1,3)(1, 3) で得られる文字列は XY
  • (2,4)(2, 4) で得られる文字列は XX
  • (2,5)(2, 5) で得られる文字列は XY
  • (3,6)(3, 6) で得られる文字列は YX
  • (3,7)(3, 7) で得られる文字列は YX

であり,XX, XY, YX がそれぞれ 22 個ずつとなって条件を満たします.

22 番目のテストケースについて,たとえば XYYXXXX と書き込めば条件を満たします.

33 番目のテストケースについては,どのように書き込んでも条件を満たしません.