跳到正文

第7章学习笔记:树上算法

课程笔记

利用树的唯一路径和层级结构,把全局询问压成局部合并。

关联:章节 第7章 树上算法

第7章笔记:树上算法

目标

利用树的唯一路径和层级结构,把全局询问压成局部合并。

七课依赖

  • 树的遍历与子树大小:围绕树的遍历与子树大小先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 树的直径:围绕树的直径先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 倍增LCA:围绕倍增LCA先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 欧拉序与子树区间:围绕欧拉序与子树区间先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 树上差分:围绕树上差分先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 重链剖分入口:围绕重链剖分入口先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
  • 树形DP的依赖方向:围绕树形DP的依赖方向先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度;边界:根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。

复杂度与适用条件表

算法对象 不变量/复杂度来源 使用边界
树的遍历与子树大小 围绕树的遍历与子树大小先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
树的直径 围绕树的直径先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
倍增LCA 围绕倍增LCA先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
欧拉序与子树区间 围绕欧拉序与子树区间先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
树上差分 围绕树上差分先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
重链剖分入口 围绕重链剖分入口先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。
树形DP的依赖方向 围绕树形DP的依赖方向先写朴素算法,再提炼状态或不变量,证明优化保持答案并计算时间空间复杂度 根会改变父子关系但不改变无根距离;递归深度可能爆栈。 本课必须再检查边界输入、整数溢出、下标和不可行状态。

复盘

每题保存暴力、优化、证明、四组边界测试和首个WA输入;一周后换数据重做。