#ATagc023f. [AGC023F] 01 on Tree

[AGC023F] 01 on Tree

题目描述

すぬけ君有一棵包含 NN 个节点的有根树。每个节点编号为 11NN,节点 11 是树的根。对于每个节点 ii2iN2 \leq i \leq N),其父节点为 PiP_iPi<iP_i < i)。每个节点上写有 0011,节点 ii 上写的数字为 ViV_i

すぬけ君想要将这棵树的所有节点排成一行。排列时,要求对于任意一个节点,其所有祖先节点都必须排在它的左侧。

排列完成后,按照节点排列顺序,将每个节点上的数字依次写成一个数列 XX。すぬけ君希望使 XX 的逆序对数(※)最小。请你求出 XX 的逆序对数的最小值。

输入格式

输入通过标准输入给出,格式如下:

NN P2P_2 P3P_3 \cdots PNP_N V1V_1 V2V_2 \cdots VNV_N

输出格式

请输出数列 XX 的最小逆序对数。

样例 1

输入

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

输出

4

样例 2

输入

1

0

输出

0

样例 3

输入

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

说明/提示

注释

对于长度为 NN 的数列 ZZ,其逆序对数定义为满足 1i<jN1 \leq i < j \leq NZi>ZjZ_i > Z_j 的整数对 (i,j)(i, j) 的个数。

数据范围

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1Pi<i1 \leq P_i < i2iN2 \leq i \leq N
  • 0Vi10 \leq V_i \leq 11iN1 \leq i \leq N
  • 所有输入均为整数。

样例解释 1

如果将节点按 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

样例解释 2

X=(0)X = (0),逆序对数为 00

由 ChatGPT 4.1 翻译