#CF4037. 黑白平衡子树

黑白平衡子树

题目描述

给你一个有根树,由 nn 个从 11nn 编号的节点组成。根是节点 11。还有一个字符串 ss 表示每个节点的颜色:如果 si=Bs_i=B,则节点 ii 为黑色;如果 si=Ws_i=W,则节点 ii 为白色。

如果一个子树的白色节点的数量等于黑色节点的数量,则该子树为平衡子树。计算平衡子树的数量。

树是一个没有环路的连通无向图。在这个问题中,所有树的根编号为 11

树由一个数组 a2,,ana_2,…,a_n 表示:aia_i 是第 ii 个节点的父节点。节点 uu 的父节点是指从 uu 到根的简单路径上的下一个节点。

节点 uu 的子树是在根的简单路径上通过 uu 的所有节点的集合。例如,在下图中,77 位于 33 的子树中,因为简单路径 75317→5→3→1 通过 33。请注意,节点包含在其子树中,根的子树是整个树。

image

上图展示了 n=7a=[1,1,2,3,3,5]s=WBBWWBWn=7,a=[1,1,2,3,3,5],s=WBBWWBW的树。顶点 2233 处的子树是平衡的。

输入格式

第一行输入包含整数 t(1t104))t(1≤t≤10^4)) 表示测试用例数。

每个测试用例的第一行包含一个整数 n(2n4000)n(2≤n≤4000) 表示树中的节点数。

每个测试用例的第二行包含 n1n−1个整数 a2,,an(1aii)a_2,…,a_n(1≤a_i<i) 表示节点 2,,n2,…,n 的父节点。

每个测试用例的第三行包含一个长度为 nn 的字符串 ss,由字符 BW 代表树的颜色。

保证所有测试用例的值 nn 之和不超过 2×1052\times 10^5

输出格式

对于每个测试用例,输出一个整数表示平衡子树的数量。

测试样例

3
7
1 1 2 3 3 5
WBBWWBW
2
1
BW
8
1 2 3 4 5 6 7
BWBWBWBW
2
1
4

样例说明

第一个测试用例如声明所示。只有节点 2233 处的子树是平衡的。

在第二个测试用例中,只有节点 11 处的子树是平衡的。

在第三个测试用例中,只有节点 1351、3、577 处的子树是平衡的。