本题其实就是统计子树中有多少个节点既有 R 协议节点,又有 B 协议节点。我们可以自顶向下来进行DFS
遍历到u节点时,首先根据u节点是 R 协议还是 B 协议,来对变量进行初始化
然后我们可以遍历u的所有子节点,去将以u为根节点的 R/B 协议节点数量进行累加计算。
最后判断以u为子树的根节点的 R 协议和 B 协议节点数量是否都大于0,若大于0,则答案+1
某星际网络中有 n 个服务器,由 n−1 条光缆连接成一个无环连通结构,任意两个服务器之间存在唯一路径。以 1 号服务器为根,除根服务器外每个服务器都有唯一上级服务器。对服务器 u,从其出发且不经过上级服务器所能到达的全部服务器称为 u 的下属服务器。u 的辖区包含 u 自身以及全部下属服务器。每个服务器运行两种协议之一:R 或 B。请统计有多少个服务器的辖区中同时包含运行 R 协议的服务器和运行 B 协议的服务器。
约束:服务器数量 n 不超过 10^5;协议字符串长度等于 n,仅包含字符 R 和 B;边数为 n−1。
第一行输入一个整数 n,表示服务器数量。第二行输入一个长度为 n 的字符串 s,仅由字符 R 和 B 组成,第 i 个字符表示编号为 i 的服务器的协议类型。接下来 n−1 行,每行输入两个整数 u 和 v,表示一条光缆连接的两个服务器编号。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.