本题其实就是统计子树中同时拥有A类证书员工和B类证书员工的员工数量。我们可以自顶向下来进行DFS
遍历到u节点时,首先根据u节点持有的证书类型是A还是B,来对变量进行初始化
然后我们可以遍历u的所有子节点,将持有A类证书和B类证书的员工数量分别累加计算。
最后判断以u为根节点的子树中持有A类证书和持有B类证书的员工数量是否都大于0,若大于0,则答案+1
在一个大型企业中,每位员工都持有一种专业证书:A 类证书或 B 类证书。企业的组织架构可以表示为一棵以 CEO(编号为 1)为根的有根树,树上的边代表直接的汇报关系。对于一位员工,我们定义他的“团队”为以该员工为根的子树所包含的所有员工。管理层希望统计有多少员工的团队中同时拥有 A 类证书和 B 类证书的成员。请你编写程序计算该数量。
输入保证:员工总数 n 不超过 105;证书字符串长度为 n 且仅由字符 A 和 B 构成;给出的 n−1 条边构成一棵树,节点编号从 1 到 n。
第一行包含一个整数 n (1≤n≤105),表示员工总数。
第二行包含一个长度为 n 的字符串 s,其中第 i 个字符 si 表示编号为 i 的员工持有的证书类型,字符为 A 或 B。
接下来 n−1 行,每行包含两个整数 u 和 v (1≤u,v≤n),表示员工 u 和员工 v 之间存在直接的汇报关系。数据保证这些边构成一棵树。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册