摘要: 题意: 一棵 n 个点的无权树,求最⼩点覆盖 思路: 那么,我们考虑一个结点可以被谁染色,不难想出,可以有3种情况:被自己染色,被儿子染色,被父亲染色 我们不妨设: f[i][0] 代表被自己染色 f[i][1] 代表被父亲染色 f[i][2] 代表被儿子染色 设当前节点是 u ,儿子节点是 v 我 阅读全文
posted @ 2020-02-20 23:29 _Ackerman 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 题意: 给一棵 n 个点的边 + 点权树,求带权重⼼ 思路: 其实这题和之前那个 Sta 有点像,我们同样只需要预处理出一个 f[u] 代表以 u 为集合点的方便程度,那么我们就可以O(1)的转移了 假设 v 是 u 的儿子,f[v] = f[u] - (siz[v] * len) + (n - s 阅读全文
posted @ 2020-02-20 23:20 _Ackerman 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 发现从根从某个位置移到它的⼀一个⼦子树得出 ans 只要 O(1) 的时间 定义 f[u] 代表以 u 为根结点的深度和 假设 v 是 u 的儿子 ,那么 f[v] 其实就是 v 的子树的深度全部 -1 ,其他节点的 阅读全文
posted @ 2020-02-20 23:12 _Ackerman 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 题目大体上也算是一个树上背包的问题,只不过有个细节需要特别注意一下 父亲如果想要儿子的苹果,那么父亲和儿子之间必须要连接起来 设 f[u][j] 代表以 u 为根节点 保留 j 条边的最大价值 根据树上背包的转移方程我们很容易知道 f[u][j] = max(f[u][j] , f[v][k] + 阅读全文
posted @ 2020-02-20 23:01 _Ackerman 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 树上背包: 树形背包就是原始的树上动归+背包,一般用来处理以一棵树中选多少点为扩展的一类题,基本做法与树上dp无异,不过在状态转移方程中会用到背包的思想。 它基本上是这个样子的: 存图),然后dfs进去补全子节点的信息,f数组的意思是以fa为中转点,找出fa往下的可取1~j个点时各自的最大收益。 f 阅读全文
posted @ 2020-02-20 22:48 _Ackerman 阅读(246) 评论(0) 推荐(0) 编辑