![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划------树型dp
d
蒋卫升
这个作者很懒,什么都没留下…
展开
-
leetcode 663. 均匀树划分
题意:给定一棵有 n 个结点的二叉树,你的任务是检查是否可以通过去掉树上的一条边将树分成两棵,且这两棵树结点之和相等。题解:树型dp,dp【i】代表i节点和它子树节点的总和,那么,我们先求出dp【root】,然后再判断是否存在某一个点,它的dp【i】= sum - dp【i】。如果有就返回true,否则返回false。/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val;原创 2020-12-08 14:04:36 · 2271 阅读 · 0 评论 -
CF #627 F. Maximum White Subtree (换根dp)
题目链接题意:给你一棵树,树上每个节点的值要么为1,要么为0,输出n个数,分别为包含第i 个点在内的联通图中cnt1 - cnt0的最大值是多少?思路:设dp【i】为包含点 i 再内的cnt1 - cnt0的最大值,那么dp【i】=dp【j】 + a【val】,(j为跟i链接的节点&&dp【j】>0)。这题的关键就是要理解subtree不是子树而是联通图。...原创 2020-03-16 14:46:27 · 237 阅读 · 0 评论 -
HDU 2196 Computer (换根dp入门及模板)
题目链接 浅谈换根dp: 换根dp一般解决什么样的题呢? 给你一棵树,问你每个节点到其他节点的路径信息(路径最大值,最小值等等)。它是在树型的基础上加上了换根的功能。 换根dp的步骤: 首先:用树型dp求出以1为根节点的dp值——第一个dfs。 其次:求出以u为根节点的dp值,然后换根...原创 2020-03-13 18:14:45 · 321 阅读 · 0 评论 -
换根dp题集
题目链接题意:给你一棵树,按顺序输出以每个顶点为根节点,到任意点的边权和最大,输出这个最大值。思路:换根dp,两遍dfs,第一个dfs求出以这个点为根节点,子树的最大边权值,保存在d数组中。第二个dfs1,首先算出以u节点为根节点的dp值,保存在ans数组里,然后求出u节点的儿子的前缀dp值保存在suf数组中,再求出u节点儿子的后缀dp值保存在x中,那么换根后的u节点的dp值,d【u】=...原创 2019-11-08 23:41:34 · 882 阅读 · 0 评论 -
树上子链 (树型dp求树的直径)
题目链接题意:思路:首先把无根树转化成有根树,然后设置dp方程,dp【i】为以i为根节点的包括i在内的最长链的长度。dp【u】=dp【v】+val【u】。那么最终的答案就是,枚举所有节点,把这个节点作为根,找两条最长的子链,答案就是这两条子链相加减去val【u】的最大值,代码如下。#include <bits/stdc++.h>#define pb push_b...原创 2020-02-23 13:35:21 · 335 阅读 · 0 评论