atcoder#AGC023F. [AGC023F] 01 on Tree

[AGC023F] 01 on Tree

配点 : 17001700

問題文

すぬけ君は、NN 頂点からなる根付き木を持っています。 頂点には 11 から NN までの番号が振られています。 頂点 11 はこの木の根です。 頂点 ii ( 2iN2\leq i \leq N ) の親は頂点 PiP_i ( Pi<iP_i < i ) です。 各頂点には、00 または 11 が書かれていて、頂点 ii に書かれている数は ViV_i です。

すぬけ君は、この木の頂点を横一列に並べたいと考えています。 その際、どの頂点についても、その頂点より右側にその頂点の先祖となる頂点がないようにします。

頂点を並べ終えたあと、頂点に書かれている数を頂点の並び順に沿って並べた数列を XX とします。 すぬけ君は、XX の転倒数 ( ※ ) を最小化したいです。 XX の転倒数の最小値を求めてください。

注釈

ある長さ NN の数列 ZZ の転倒数とは、整数 i,ji, j ( 1i<jN1 \leq i < j \leq N ) の組であって、Zi>ZjZ_i > Z_j を満たすものの個数を意味します。

制約

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1Pi<i1 \leq P_i < i ( 2iN2 \leq i \leq N )
  • 0Vi10 \leq V_i \leq 1 ( 1iN1 \leq i \leq N )
  • 入力はすべて整数である。

入力

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

NN

P2P_2 P3P_3 ...... PNP_N

V1V_1 V2V_2 ...... VNV_N

出力

数列 XX の転倒数の最小値を出力せよ。

6
1 1 2 3 3
0 1 1 0 0 0
4

頂点を 1,3,5,6,2,41, 3, 5, 6, 2, 4 の順に並べると、X=(0,1,0,0,1,0)X = (0, 1, 0, 0, 1, 0) となり、 転倒数は 44 になります。 これ以上転倒数を小さくすることは出来ないので、44 を出力します。

1

0
0

X=(0)X = (0) で、転倒数は 00 です。

15
1 2 3 2 5 6 2 2 9 10 1 12 13 12
1 1 1 0 1 1 0 0 1 0 0 1 1 0 0
31