树形dp
whoammiiiiii
这个作者很懒,什么都没留下…
展开
-
hdu 2196求树上每个点各自的最远距离(树形dp)
题目链接 记 f[u] 为节点 u 第一步向儿子方向走的最远距离 记 g[u] 为节点 u 第一步向父亲方向走的最远距离 记 p[u] 为节点 u 的父亲节点的编号 f[u] = max{f[v] + w(u, v)} ,v是u的儿子 g[u] = w(u, p[u]) + max{g[p[u]], f[v] + w(p[u], v)}, v 是 u 的兄弟 所以要做两边dfs,先求出f再求出g。 最后节点 u 的最远距离即为max{f[u], g[u]}。 #include <bits/stdc原创 2020-05-23 19:59:49 · 439 阅读 · 0 评论 -
POJ 1655 求树的重心(树形dp)
题目链接 树的重心: 若树上的一个节点满足其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心。 1.任选一个点为根,只要统计出每个点的子树大小,就能很快求出每个点子树节点的数量的最大值。 2.求每个点子树的大小同样只需要自底向上的更新信息。 3.记sz[u]为子树u节点的数量(包括 u 本身) 4.sz[u] = 1 + 所有子节点v的sz之和 #include <map> #include <set> #include <cmath> #include原创 2020-05-23 16:16:31 · 165 阅读 · 0 评论