随笔分类 - 动态规划 - 树形dp
摘要:题目大意:给定一棵 N 个节点的树,边有边权,选定 M 个叶子节点,使得任意两个叶子节点的树上距离之和最小,求最小值是多少。 题解:任意两点的树上距离和问题应从边的贡献角度考虑。 设 $f[u][i]$ 表示以 u 为根的子树中,选了 i 个叶子节点的最优解,状态转移方程为: $$ f[u][i +
        阅读全文
                
摘要:题目大意:给定一棵 N 个点的树,初始全是白点。要求你做 N 步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联通块大小的权值。第一次操作可以任意选点,求可获得的最大权值。 题解:对于答案仅由起始点决定的 dp 采用换根法。 发现对于两个相邻的染了黑色
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,树边有两个权值,分别为走路的代价和开车的代价。有一个旅行者开车要从根节点出发,必须遍历给定点集,可以在任何位置停止旅行,有车时可以选择开车或步行,没车只能跑路,求最小代价。 题解:这是我做过最恶心的树形dp QAQ 和 apple tree
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,每个点有两种颜色(黑、白),现给出树上每个节点的颜色,求有多少种分割树的方式,使得分割出的每个联通块中有且仅有一个黑点。 题解:树形dp 由于每个点都需要属于一个联通块,且一个联通块中不会有超过1个黑色点。又由于树形dp的状态转移是从子节点
        阅读全文
                
摘要:题目大意:给定一棵有根树,1 号节点为根节点,点有点权,边有边权,初始给定一个价值,每经过一条边都会减少该价值,每经过一个点都会增加相应的答案贡献值,求如何在给定价值的情况下最大化答案贡献,并要求最后在 N 号节点停留,若无法停留,则输出相应字符串。 题解: 首先,不考虑要求在 N 号节点停留的限制
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的有根树,边有边权,在根结点处有 K 个人,这些人会遍历树上的所有边,求如何遍历才能使得所有人走过路径的边权和最小。 题解: 引理:对于一棵子树来说,若存在 M 0 个人最后停留在这棵子树内,则对于最优情况来说,来到过这棵子树的人也只能是 M 个,即:不会存在第 M+1
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的有根树,点有点权,边权均为1。现允许从根节点出发走 K 步,求可以经过的点权之和最大是多少。 题解:可以将点权看作是价值,将可以走的步数看作是重量,则转化成了一个树上背包问题。 显然状态中的两个维度应该有以 i 为根和走的步数,但是发现若从当前节点走到了其中一个子节点
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的无根树,每个节点有一个重量和一个价值,现给出一些单位,每个单位可以接受 20 个重量单位,求如何分配这些单位,使得获得的价值最大。 题解:dp 好题qwq。。真的毒瘤。 状态转移很好设计,$dp[i][j]$ 表示以 i 为根节点的子树中,分配 j 个单位可以获得的最
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的无根树,边有边权,现生成一个序列 d,d[i] 表示 i 号节点到树上其他节点距离的最大值。给定一个 m,求 d 序列中最大值和最小值之差不超过 m 的最长连续段的长度是多少。 题解:d[i] 直接两次 dfs 即可,考虑如何求出最长连续段。可以发现若当前 [l,r]
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的无根树,点有点权,边有边权,现需要选出一个点集,满足树上任意一个点到该点集的距离不超过该点的给定值,求选出点集点权的最小值是多少。 题解:可以发现,对于以 i 为根的子树来说,i 点依赖的点很有可能并不是 i 内部的节点,转移比较麻烦。考虑开两个数组 f[], g[]
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的无根树,边有边权。求每个节点到树上其他节点距离的最大值是多少,距离定义为两个节点之间路径的边权和。 题解:首先,进行一次 dfs 求出每个节点到其子树中点的距离的最大值和次大值,最大值用 $dp[u][0]$ 表示,次大值用 $dp[u][1]$ 表示。发现对于树上任
        阅读全文
                
摘要:题目大意:给定一个二叉树,可以染红绿黄三种颜色,要求父节点和子节点的颜色不同,且如果一个节点有两个子节点,那么两个子节点之间的颜色也不同。求最多和最少有多少个节点会被染成绿色。 题解:加深了对二叉树的理解。 对于二叉树来说,每个节点只需保留左右儿子节点编号即可。设 $f[i]$ 表示以 i 为根的子
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,叶子节点有点权,每条边有边权,每经过一条边都减去该边权,每经过一个节点都加上该点权,求在保证权值和为非负数的前提下最多能经过多少个叶子节点。 题解:$dp[u][i]$ 表示在以 u 为根节点的子树中,经过 i 个叶子节点的最大权值和,则有
        阅读全文
                
摘要:题目大意:给定一个 N 个点的外向树森林,点有点权。从该树中选出若干顶点组成一个集合,满足任意相邻的两个顶点不同时出现在该集合中,求这样集合中点权和的最大值为多少。 题解:与树相比,该题多了环这个结构。对于环上任意一条边来说,边的端点不可能同时被选取,因此,可以选择环上任意一条边,将其断开,答案不变
        阅读全文
                
摘要:题目大意:给定一个 N 个节点的树,求至少剪掉多少条边才能使得从树中分离出一个大小为 M 的子树。 题解:考虑树形 dp,定义 $dp[u][i][t]$ 为以 u 为根节点与前 i 个子节点构成的子树中,保留 t 个节点(包括根节点)的最小代价,则状态转移方程为 $dp[u][i][t]=min(
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的无根树,点有点权,点权有正有负,求这棵树的联通块的最大权值之和是多少。 题解:设 $dp[i]$ 表示以 i 为根节点的最大子树和,那么只要子树的 dp 值大于0,就应该算到 i 的 dp 贡献中,每次计算完后,答案取最大即可。 这里要说明的是,此题并不需要二次扫描与
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的有根树(其中根节点始终为 1 号节点),点有点权,点权只有 1 和 0 两种,求从根节点到叶子节点的路径中,有多少条路径满足:路径上最大连续点权为 1 的节点个数不超过 M。 题解:一开始想到了树形dp,即:$dp[i][0/1]$ 表示从根节点到该点的路径中不选/选
        阅读全文
                
摘要:题目大意:给定一棵 N 个节点的树,求从 1 号节点(根节点)出发,任意节点结束,且至少经过每个节点一次的最短路径是多少。 题解:首先考虑最终要回到根节点的情况,可以发现最短路径长度一定等于该树边权的 2 倍。因此,在任意一点结束只需在答案贡献中减掉该树的一条最长链即可。 代码如下 cpp incl
        阅读全文
                
摘要:题目大意:给定一棵 N 个点的边权均为 1 的树,依次输出每个点到其他各个点的距离和。 题解:首先任意选定一个节点为根节点,比如 1,第一遍 dfs 遍历树求出子树大小、树上前缀和。第二遍 dfs 遍历这棵树,求出各个点的距离和。 对于遍历到的任意一个节点 i,对于与之相邻的节点 j 来说,答案贡献
        阅读全文
                
摘要:题目:给定一棵 N 个点的无向树,边有边权,求树上任意两点间的距离和,答案对 1e9+7 取模。 题解:依题可知,这道题所求即:$\Sigma_{i=1}^{n 1}\Sigma_{j=i+1}^{n} dist(i,j)$,枚举树上任意两点并计算距离的复杂度要达到 $O(n^2logn)$,时间难
        阅读全文
                

 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号