#CF4037. 黑白平衡子树
黑白平衡子树
题目描述
给你一个有根树,由 个从 到 编号的节点组成。根是节点 。还有一个字符串 表示每个节点的颜色:如果 ,则节点 为黑色;如果 ,则节点 为白色。
如果一个子树的白色节点的数量等于黑色节点的数量,则该子树为平衡子树。计算平衡子树的数量。
树是一个没有环路的连通无向图。在这个问题中,所有树的根编号为 。
树由一个数组 表示: 是第 个节点的父节点。节点 的父节点是指从 到根的简单路径上的下一个节点。
节点 的子树是在根的简单路径上通过 的所有节点的集合。例如,在下图中, 位于 的子树中,因为简单路径 通过 。请注意,节点包含在其子树中,根的子树是整个树。
上图展示了 的树。顶点 和 处的子树是平衡的。
输入格式
第一行输入包含整数 表示测试用例数。
每个测试用例的第一行包含一个整数 表示树中的节点数。
每个测试用例的第二行包含 个整数 表示节点 的父节点。
每个测试用例的第三行包含一个长度为 的字符串 ,由字符 B
和 W
代表树的颜色。
保证所有测试用例的值 之和不超过 。
输出格式
对于每个测试用例,输出一个整数表示平衡子树的数量。
测试样例
3
7
1 1 2 3 3 5
WBBWWBW
2
1
BW
8
1 2 3 4 5 6 7
BWBWBWBW
2
1
4
样例说明
第一个测试用例如声明所示。只有节点 和 处的子树是平衡的。
在第二个测试用例中,只有节点 处的子树是平衡的。
在第三个测试用例中,只有节点 和 处的子树是平衡的。