
树形dp
Bahuia
软件工程博士
展开
-
CF - 274B 树形dp
题意:给出的一棵树,树上每个节点都都有一个值,现在可以每次选择树上的一块联通区域,要求这个区域中必须包含节点1,每次可以选择的合法区域进行所有节点值+1或-1的操作,问要使所有节点的值都变为0,最少需要几步操作?思路:一道树形DP。不妨以节点1为根,这样可以发现,要让每个节点的值都为0,而且每一步的操作都要求包含根,那么儿子节点一定不会晚于父亲节点变成0,所以我们可以从下到上进原创 2016-11-09 18:40:12 · 604 阅读 · 0 评论 -
HDU 6201 树形dp
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201 给一棵n个节点的树,每个节点和边都有权值,求一条价值最大的路径。价值为该条路径终点的价值 - 起点的价值 - 路径上边的权重和。思路:树形dp,分别考虑祖先与后代以及兄弟之间的关系即可。细节比较多,详见代码。代码:#include <bits/stdc++.h>using namespa原创 2017-09-15 20:49:02 · 410 阅读 · 0 评论 -
HDU 6035 树形dp
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 一棵n个结点的树,每个结点都有颜色,定义两点之间的路径长度为路径上出现的不同颜色数目,求树上所有路径的长度和。思路:“真的难”系列。 首先这题肯定是算贡献,也就是计算出每种颜色参与了多少条路径,但这样正面考虑并不容易,不妨从反面考虑,计算每种颜色没有参与多少路径,然后拿 (路径总数 *原创 2017-07-26 13:06:55 · 3958 阅读 · 5 评论 -
FZU 2256 树形dp(水)
题意:题目链接:http://acm.fzu.edu.cn/problem.php?pid=2256 中文题。思路:一遍dfs,维护路径中遇到的传送门的最短时间即可。代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>using namespace st原创 2017-07-22 17:06:04 · 539 阅读 · 0 评论 -
Codeforces 337D 树形dp + 小技巧
题意:题目链接:http://codeforces.com/problemset/problem/337/D 一棵n个节点的树,树上有m个点有恶魔,现在在树上要定位一个魔法书的位置,已知每个恶魔离魔法书的距离不超过d,问一共有多少个节点可能有魔法书。思路:典型的树形dp,需要求出每个节点到其他恶魔点的最远距离dis,最后看有多少个点可以满足dis <= d即可。 分两次dfs,一次从下到上,一次原创 2017-07-21 12:21:51 · 541 阅读 · 0 评论 -
CF round 277 (div2) D题 树形dp
题意:题目链接:http://codeforces.com/contest/486/problem/D 找到树中有多少个满足条件的集合,保证联通且集合中最大值与最小值的差不超过d思路:这种最大值与最小值的差有范围的情况,要先固定一端,比如枚举最大值,然后找每个节点充当最大值能满足的集合有多少。 这样的思路会存在多个最大值的重复问题,需要对dfs限定顺序,比如只允许相同最大值只允许从小的访问大的。原创 2017-06-29 22:17:51 · 410 阅读 · 0 评论 -
HDU - 5723 最小生成树 + 树形dp
题意:给出n个点和m条边,每条边有一个权值,题目保证每条边的权值都不一样,求出一个权值最小生成树,并且求出任意选择n个点中的两点之间距离的权值的最小期望。思路:最小生成树没什么好说的,因为每条边权值不一样,所以可以保证求出的最小生成树一定只有一个解。按照求出的最小生成树建一棵树,所谓期望=任意两点之间的距离和/C(n,2),这样只要求出任意选择两个点的所有情况的距离和即可,dp一下。原创 2017-03-16 10:31:53 · 445 阅读 · 0 评论 -
hihocoder - 1479 树形dp
题意:给出一个有根树,每个节点都有一个权值,在其中选出不是根节点的两个节点,将这两个节点与其父亲之间边删去,可以将这棵树分成三个部分,求一共有多少种分法,可以让这三个部分的权值和相等。思路:这题一开始看错了题怎么都过不了,题目中说父亲节点为0的就是根节点,而我看成了0就是根节点,最后看别人代码才发现自己题读错了,太蠢。树形dp,很显然如果存在这样的分法,所有节点的权值总和sum原创 2017-03-15 15:23:22 · 509 阅读 · 2 评论 -
51Nod - 1737 树形dp
题意:给出一棵n个点的树,将这n个点两两配对,求所有可行的方案中配对两点间的距离的总和最大为多少。Input一个数n(1<=n<=100,000,n保证为偶数)接下来n-1行每行三个数x,y,z表示有一条长度为z的边连接x和y(0Output一个数表示答案Input示例61 2 11 3 11 4 13 5 14 6 1原创 2017-01-23 14:51:49 · 395 阅读 · 0 评论 -
51Nod - 1677 树形dp + 组合数学
题意:给定一棵n个节点的树,从1到n标号。选择k个点,你需要选择一些边使得这k个点通过选择的边联通,目标是使得选择的边数最少。现需要计算对于所有选择k个点的情况最小选择边数的总和为多少。样例解释:一共有三种可能:(下列配图蓝色点表示选择的点,红色边表示最优方案中的边)选择点{1,2}:至少要选择第一条边使得1和2联通。 选择点原创 2017-02-05 16:32:00 · 739 阅读 · 0 评论 -
CF - 461B 树形dp
题意:给出一棵n个节点的无根树,每个节点要么是0,要么是1,现在要把树分成若干区域,要求每个节点都必须属于一个区域,而且一个区域中只能有一个节点为1。问一共有多少种分法?思路:设dp[i][0]表示节点i属于某个没有1的区域的方案数,dp[i][1]表示节点i属于某个有1的区域的方案数。可以得到状态转移方程:dp[u][0] = dp[u][0] * (dp[v][0] +原创 2016-11-09 19:36:32 · 487 阅读 · 0 评论 -
HDU 6161 乱搞+dp
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6161 一棵完全二叉树,每个编号位x的结点的儿子的左儿子和右儿子分别是2 * x,2 * x + 1,出事情况下,每个 结点的值都等于它的编号x,现在有m个操作,分为两类,一类是将编号为x的结点价值更新为y,另一类是查询经过结点x的路径的最大价值和。思路:对于一个结点x,经过它的路径要么是从x的左原创 2017-08-30 12:32:25 · 660 阅读 · 0 评论