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

题目描述

小团有一棵树,这棵树有n个节点,编号为1-n。每个节点上有一个值 a_i 。1号节点为整棵树的根。
现在,小团给小美一个难题:小美每次可以操作一个节点x,将 a_x 变为 a_x 1 ,保持x所有的儿子不变,将x所有儿子的儿子 a_y 变为 a_y 1 ,保持所有的儿子的儿子的儿子不变,以此类推。
代表位运算异或。
小团希望小美用尽可能少的次数,将所有的 a_i 变为 b_i ,请帮助小美计算这个最少的次数。
数据保证在有限步数内,能够将所有的 a_i 变为 b_i

输入输出

输入描述
输入第一行包含一个整数n,代表节点数。
接下来n-1行,每行两个整数 u_i, v_i ,代表树上的一条边
接下来一行,一共n个数,第i个数代表 a_i 。
接下来一行,一共n个数,第i个数代表 b_i 。
输出描述
输出包含一行一个数,即小美的最少操作次数。

样例共 1 组

样例 1 · 小美需要操作两次,第一次操作1号节点,三个节点的权值变为5 5 0,第二次操作3号节点,三个节点的权值变为5 5 1
输入
3
1 2
2 3
4 5 1
5 5 1
输出
2

算法解析依据充分

考点:树

限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:树

本题切入点

每次操作是把某节点的同深度后代全体异或 1,用树上差分/按深度分层统计每个节点需要的操作次数。

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

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

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

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

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

该范式的通法易错点

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

题目给出的提示

  • 在有限步数内,能够将所有的 a_i 变为 b_i

样例解读

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

小美需要操作两次,第一次操作1号节点,三个节点的权值变为5 5 0,第二次操作3号节点,三个节点的权值变为5 5 1

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

本题来源:美团2023校招笔试-编程题(算法编程题)。

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