【笔记】树形dp
目录:
(一)简介
(二)例题
(一)简介:
(1)树是什么?
树是⼀种⼗分优美的数据结构,因为它本身就具有的递归性,所 以树和⼦树之间能相互传递很多信息。
树上的许多特征都可以通过它的⼦树的对应特征计算获得。
所以树做动态规划求最优解和做统计非常⽅便。
(2)树的定义:
n 个点,n-1 条边的⽆向连通图称为树。
(3)相关概念:
结点?
叶节点和分支节点?
结点的度?结点的连边数
树的度数?结点的度的最⼤值
祖先和⼦孙?
森林?
结点深度,树⾼,⼦树⼤小?
(二)例题:
(1)给定⼀棵 n 个点的⽆权树,问树中每个⼦树的⼤小,每个节点的 深度? 其中 0 ≤ n ≤ 10^5
(2)给定⼀棵 n 个点的点权树,问树中每个⼦树的点权和,点权最⼤ 值? 其中 0 ≤ n ≤ 10^5
(3)给定⼀棵 n 个点的⽆权树,求树的重⼼?
重⼼:删去该点之后,图中的所有连通块的最⼤尺⼨最小。 其中 0 ≤ n ≤ 10^5
(4)给定⼀棵 n 个点的边权树,问树中每个⼦树的最长链?次长链? 其中 0 ≤ n ≤ 10^5
(5)给定⼀棵 n 个点的边权树,对于树中每个节点 i,询问其到其它所有结点的距离和。 其中 0 ≤ n ≤ 10^5
(6)给定⼀棵 n 个点的边权树,求树的直径。 其中 0 ≤ n ≤ 10^5
做法一:
树的直径⼀定为某个点到其不同⼦树叶⼦的最长链 + 次长链
暴力求解,从每个点开始遍历图,可以得到每个点v所在的最长路径max1和次长路径max2,注意的是最长路径和次长路径除了点v没有其他公共结点。
时间复杂度为O ( n 2 ) O(n^2)O(n^2)
做法二:
选择⼀个点 X,求出其最远点 Y,再求 Y 的最远点 Z,则 YZ 为 直径
(反证法:分X在直径UV上,和不在直径UV上两种情况)
两遍DFS(或者BFS)就行
(7)给定⼀棵 n 个点的⽆权树,求其每个⼦树的重⼼。
⼦树重⼼定义为,删去该点之后,⼦树的所有连通块⼤小均不超过 n/2 其中 0 ≤ n ≤ 10^5
(8)没有上司的舞会:
(9)二叉苹果树