#P13954. [ICPC 2023 Nanjing R] 红黑树

    ID: 15721 远端评测题 2000ms 1024MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>动态规划 DP2023ICPC南京斜率维护技巧 slope trick

[ICPC 2023 Nanjing R] 红黑树

题目描述

有一棵 nn 个节点的有根树,节点编号从 11nn,其中节点 11 为根。每个节点都有一个颜色, 要么是红色,要么是黑色。

称一个节点是好的,若每一条以该节点为起点,以该节点任意一个后代叶子节点为终点的简单路径中,都包含相同数量的黑色节点。称一棵树是完美的,若树中每个节点都是好的。

RkR_k 表示以节点 kk 为根的子树。对于每个 1kn1 \le k \le n,回答以下询问:如果您可以任意选择一些节点并改变它们的颜色(也就是说,把红色节点改成黑色,以及把黑色节点改成红色),至少需要选择几个节点才能让 RkR_k 变得完美。

请回忆:简单路径不会多次经过同一条边。

同时请回忆:以节点 kk 为根的子树是一棵由节点 kk 所有后代组成的有根树,并以节点 kk 为根。请注意,每个节点都是它自己的后代。

输入格式

有多组测试数据。第一行输入一个整数 TT 表示测试数据组数,对于每组测试数据:

第一行输入一个整数 nn2n1052 \le n \le 10^5)表示树中节点的数量。

第二行输入一个长度为 nn 的字符串 s1s2sns_1s_2\cdots s_nsi{0,1}s_i \in \{0, 1\})。若 si=0s_i = 0 则节点 ii 是红色节点;若 si=1s_i = 1 则节点 ii 是黑色节点。

第三行输入 (n1)(n - 1) 个整数 p2,p3,,pnp_2, p_3, \cdots, p_n1pi<i1 \le p_i < i),其中 pip_i 是节点 ii 的父节点。

保证所有数据 nn 之和不超过 10610^6

输出格式

每组数据输出一行 nn 个由单个空格分隔的整数,其中第 ii 个整数表示至少需要选择几个节点才能让 RiR_i 变得完美。

请不要在行末输出多余空格,否则您的答案可能会被认为是错误的!

2
9
101011110
1 1 3 3 3 6 2 2
4
1011
1 1 3
4 1 2 0 0 0 0 0 0
2 0 0 0

提示

:::align{center} :::

我们展示第一组样例数据。

为了让 R1R_1 变得完美,我们可以改变节点 22446699 的颜色。改变之后,所有从节点 11 到后代叶子节点的路径均包含 33 个黑色节点,所有从节点 22 到后代叶子节点的路径均包含 22 个黑色节点,所有从节点 33 到后代叶子节点的路径均包含 22 个黑色节点。由于节点 4499 都只有一个后代叶子节点,所以它们一直都是好的。

为了让 R2R_2 变得完美,我们可以改变节点 88 的颜色。改变之后,所有从节点 22 到后代叶子节点的路径均包含 00 个黑色节点。由于节点 8899 都只有一个后代叶子节点,所以它们一直都是好的。