美团 · 树 · 算法编程题
美团 n ≤ 200000 时限 1 秒 / 256 MB

题目描述

小美有一棵由 n 个节点组成的树,每个节点被涂为红色或黑色。她想统计树中有多少条颜色交错的简单路径。
路径是指任意两个节点之间的唯一简单路径,并且我们也将单个节点自身视为长度为 1 的路径。若一条路径上任意相邻的两个节点颜色不同,则称该路径为颜色交错的路径。
请计算树中颜色交错的路径总数。
【名词解释】
【树上的路径】从节点 u 到节点 v 的简单路径定义为从节点 u 出发,以节点 v 为终点,随意在树上走,不经过重复的点和边走出来的序列。可以证明,在树上,任意两个节点间有且仅有一条简单路径。

输入输出

输入描述
第一行输入一个整数 n(1 ≤ n ≤ 2×10^5) ,表示树的节点数量。
接下来 n-1 行,每行输入两个整数 u 和 v (1 ≤ u,v ≤ n;u ≠ v) ,表示节点 u 与 v 之间有一条无向边。保证输入构成一棵树。
接下来一行,输入一个长度为 n 的字符串 s ,仅由字符 B 和 R 构成,其中 s_i=B 表示第 i 个节点为黑色; s_i=R 表示红色。
输出描述
输出一个整数,表示树中颜色交错的路径总数。

样例共 2 组

样例 1 · 这棵树共有 16 条颜色交错的路径(包括 6 条单节点路径、4 条长度为 2 的路径、3 条长度为 3 的路径、2 条长度为 4 的路径、1 条长度为 5 的路径)。
输入
6
1 2
2 3
3 4
4 5
3 6
BRBRBB
输出
16
样例 2 · 只有单节点路径满足颜色交错,共 3 条。
输入
3
1 2
2 3
BBB
输出
3

算法解析依据充分

考点:树 · 组合数学 · 并查集

数据规模 n ≤ 200000 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 200000
  • 复杂度门槛:只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:树

树结构上的遍历(DFS 求子树信息 / BFS 求层序),多数树题是「后序遍历 + 回溯」。

思路框架(树 通法 · 非本题专属)

  1. 按输入建图(父子关系一般给父节点编号,孩子用邻接表存)。
  2. 确定遍历方式:自底向上合并子树信息(后序 DFS)或自顶向下传参(前序 DFS)。
  3. 对每个节点,用孩子的答案合并出当前节点的答案。
  4. 涉及层间操作(如层序变换)时用 BFS 逐层处理。

实现要点:递归深度可能到 1e5,注意递归爆栈;必要时改迭代或调整递归深度。

复杂度:时间 O(n) | 空间 O(n)

该范式的通法易错点

  • 递归深度过大导致爆栈。
  • 建树时父子关系方向搞反(把树当成有向图但遍历方向错)。

对照本题

  • 数据规模 n ≤ 200000,只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。

样例解读

样例 1:输入 6 / 1 2 / 2 3 / 3 4 / 4 5 / 3 6 / BRBRBB → 输出 16

这棵树共有 16 条颜色交错的路径(包括 6 条单节点路径、4 条长度为 2 的路径、3 条长度为 3 的路径、2 条长度为 4 的路径、1 条长度为 5 的路径)。

样例 2:输入 3 / 1 2 / 2 3 / BBB → 输出 3

只有单节点路径满足颜色交错,共 3 条。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2025年秋招-美团-算法策略端-第一批笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解