#CSPJ1015. 红黑树(tree)

红黑树(tree)

题目描述

在本题中,我们定义红黑树为既包含黑点又包含红点的树。

给定一棵 nn 个点的有根树,根为节点 11,初始每个点都是红色,有 nn 次操作,每次操作会把 pip_i 变成黑色,保证操作序列 pp 是一个排列,即每次操作的点都不相同。

每次操作完成后,你需要输出有多少个子树是红黑子树,即子树内既包含黑点又包含红点。

  • 即有多少个点 ii,以 ii 为根的这棵子树是一棵红黑树。

输入格式

tree.in 文件读入数据。

第一行一个整数 nn

第二行 n1n-1 个整数,第 ii 个整数表示第 i+1i+1 个点的父亲节点 faifa_{i}

第三行 nn 个整数 pip_i ,表示操作序列。

输出格式

输出到 tree.out 文件。

一行 nn 个整数,表示每次操作后有多少个子树是红黑子树。

输入输出样例

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

样例2

点击链接 ex_tree2.inex_tree2.out 文件下载大样例 2 的输入数据和输出数据。

说明/提示

对于 20%20\% 的数据,fai=i1fa_i=i-1

对于 50%50\% 的数据,n5000n\leq 5000

对于 100%100\% 的数据,1n105,fai<i1\leq n \leq 10^5,fa_i<i