给一棵共有 n
个结点的树,每个结点初始标签为 d / p / ?
。
一次操作可以把任意结点的标签改为 d
或 p
,每次改动计 1 次。
目标:通过最少的重绘,使
d
或 p
;给定一棵有n个节点的树,节点编号为1到n。每个节点带有一个字符标签si,仅可为d、p或?。
你可以对任意节点进行重绘操作,将其标签修改为d或p。每次重绘操作均计为一次修改。
请你找到一组重绘方案,使得最终所有的标签都是d或p,并且每条边连接的两个节点标签均不相同,并使得重绘次数最少。输出最少的重绘次数。
第一行输入一个整数n(2≦n≦2×105),表示树的节点数。
第二行输入一个长度为n的字符串s,仅包含字符d、p和?,表示节点1到n的初始标签序列。
接下来n−1行,每行输入两个整数ui和vi(1≦ui,vi≦n;ui=vi),表示节点ui与vi之间存在一条无向边。
输出一个整数,表示最小重绘次数。
输入
5
?d?pp
1 2
2 3
2 4
4 5
输出
3
说明
原标签序列为?d?pp;一种最优重绘方案为将节点1重绘为P,节点3重绘为P,节点5重绘为d,得到标签pdppd;
最少重绘次数为3。
输入
4
dddd
1 2
2 3
3 4
输出
2