随笔分类 -  DP--树形DP

摘要:题目链接:https://vjudge.net/problem/HDU-4276 题意:给出一棵树,起点为1,时间为V,终点为n,每个点有一个价值a[u],每条边有一个时间花费w,求在时间V内到达终点n可以获得的最大价值。 思路: 考虑边有两种情况,一种是属于1->n路径上的(只用走一次),一种是不 阅读全文
posted @ 2019-10-20 10:12 Frank__Chen 阅读(156) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-3534 题意:给出一棵树,求树上最长距离(直径),以及这样的距离的条数。 思路:如果只求直径,用两次dfs即可。但是现在要求最长距离的条数,用dp1[u]记录以u为根的子树中叶子结点到u的最长距离,dp2[u]表示最长距离的条 阅读全文
posted @ 2019-10-19 21:45 Frank__Chen 阅读(480) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-3107 题意:求树的可能的重心,升序输出。 思路:因为学树形dp之前学过点分治了,而点分治的前提是求树的重心,所以这题就简单水了一下。用sz[u]记录子树u的大小,son[u]记录以u为根时,子结点中最大的结点数。所以: so 阅读全文
posted @ 2019-09-05 19:38 Frank__Chen 阅读(339) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-3586 题意:一棵边权树,要删掉一些边使得每个叶子结点不能到达树根,且这些边的权值<=上限Max,且边权和小于m,求最小的上限ans,如果不满足则输出-1。 思路: 属于删边的树形dp。二分枚举上限Max,查找最小的满足要求的 阅读全文
posted @ 2019-09-05 19:14 Frank__Chen 阅读(211) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-2486 题意:一棵点权树,起点在1,求最多经过m条边的最大点权和。 思路: 树形dp经典题。用3维状态,dp[u][j][0/1]表示在子树u中走j步的最大价值(回到u/不回到u)。显然dp[u][j][1]>=dp[u][j 阅读全文
posted @ 2019-09-04 21:46 Frank__Chen 阅读(284) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-4003 题意:给一棵边权树,在树根s有m个人,要通过m个人遍历到所有点,一个人经过一条边花费为边的权值,求最小花费(可以走已经走过的边)。 思路: 状态比较好想,用dp[u][j]表示在u结点的子树中有j个人的最小花费。但转移 阅读全文
posted @ 2019-09-04 13:43 Frank__Chen 阅读(161) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-1561 题意:给一个森林,每个结点有个权值,求选m个结点的最大权值和,并且选子结点前必须先选父结点。 思路: 把每颗树的树根连在0号结点上,那么就是一棵树了,最后求选m+1个结点的最大权值即可。状态很好想,用dp[u][j]表 阅读全文
posted @ 2019-09-04 11:10 Frank__Chen 阅读(120) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-1947 题意:给定一棵树,求得到一个结点数为p最少删多少条边。 思路: 明显的树形dp,分组背包。用dp[u][j]表示在结点u的子树上选j个结点最少要删除的边(一定包含结点u),那么dp[u][1]=num[u],num[u 阅读全文
posted @ 2019-09-03 12:14 Frank__Chen 阅读(296) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-1011 题意:给定一颗树,每个结点有两个属性,即花费V和价值w,并且选择子结点时必须选择父结点,求总花费不超过m的最大价值。 思路: 树上分组背包。和poj1155相似,对于结点u,先递归计算其子结点v的dp值,然后对于每个子 阅读全文
posted @ 2019-08-30 21:39 Frank__Chen 阅读(304) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-1155 题意:给定一颗以1为根的边权树,有n个结点,其中m个叶子结点,每个叶子结点有一个价值。要求从m个叶子结点中选最多的结点,费用是从根节点到叶子结点的边权和,价值是所有选中的叶子结点价值和。 思路: 树上分组背包。用dp[ 阅读全文
posted @ 2019-08-30 14:46 Frank__Chen 阅读(206) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-3162 题意:给一棵树,求每个结点的树上最远距离,记为a[i],然后求最大区间[l,r]满足区间内的max(a[i])-min(a[i])<=M。 思路:第一步向hdoj2196那题一样树形dp求出每个结点的最长距离,我的另一 阅读全文
posted @ 2019-08-28 11:55 Frank__Chen 阅读(174) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-6446 题意:简化题意后就是求距离和的2*(n-1)!倍。 思路: 简单的树形dp,通过求每条边的贡献计算距离和,边(u,v)的贡献为sz[v]*(n-sz[v])。 另外因为前几天学点分治,看到这题想到可以用点分治求距离和。 阅读全文
posted @ 2019-08-27 20:15 Frank__Chen 阅读(177) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-2152 题意:给定一颗大小为n的树,在每个结点建消防站花费为w[i],如果某结点没有消防站,只要在它距离<=d[i]的结点有消防站即可,求最小花费。 思路: 好难的树形dp,一点思绪也木有,只能搜题解。 用dp[u][i]表示 阅读全文
posted @ 2019-08-27 16:51 Frank__Chen 阅读(279) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-5909 题意:给一颗树,结点带权值v[i]<m。求异或和为k的子树个数(0<=k<m)。 思路: 首先点分治处理一颗树,跑一遍dfs得到该树的dfs序。然后我们用序列dp来做,用dp[i][j]表示必须包括重心,处理序列中第i 阅读全文
posted @ 2019-08-25 15:42 Frank__Chen 阅读(224) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-2196 题意:给出一棵树,求每个结点可以到达的最远距离。 思路: 如果求得是树上最长距离,两次bfs就行。但这里求的是所有点的最远距离,树形dp的经典题,想了一个小时,还是dp做得太少。分析可得对任意结点u,它的最长距离要么是 阅读全文
posted @ 2019-08-19 10:20 Frank__Chen 阅读(294) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-1520 题意:和luogu那道没有上司的舞会一样的题,给定一棵带点权的树,父结点和子结点不能同时选,问怎么选使得权值和最大,求最大值即可。 思路:最近开始肝树形dp,从入门题开始QAQ,加油! 用dp[u][0]表示结点u不选 阅读全文
posted @ 2019-08-18 15:33 Frank__Chen 阅读(230) 评论(0) 推荐(0)
摘要:题目链接:https://nanti.jisuanke.com/t/39277 题意:给出一棵有边权的树,求所有简单路径包含异或和为0的简单路径的总数和。 思路: 首先,对于异或为0这一限制,我们通过dfs得到根节点到所有点的路径上的异或和val[i],如果两个结点的val值相等,说明他们之间的路径 阅读全文
posted @ 2019-08-18 11:47 Frank__Chen 阅读(166) 评论(0) 推荐(0)
摘要:题目链接:https://ac.nowcoder.com/acm/contest/992/J 题意:题意很清晰,就是求任意两点距离的和,结果对1e9+7取模。 思路:裸的树形DP题,一条边的贡献值=这条边的权值×左端连接的顶点数×右端连接的顶点数,所以我们dfs算出点y的子树大小siz[y],x为y 阅读全文
posted @ 2019-07-16 14:48 Frank__Chen 阅读(207) 评论(0) 推荐(0)
摘要:题目链接:https://www.luogu.org/problemnew/show/P1352 题意:给定n个结点,每个结点有一个权值,给n-1条边,n个结点构成一棵树。并且规定一个结点的父结点如果存在,则该结点不能存在,若父结点不存在,则子结点可以存在也可以不存在。求存在的结点权值和最大是多少。 阅读全文
posted @ 2019-07-14 21:27 Frank__Chen 阅读(129) 评论(0) 推荐(0)
摘要:题目链接:https://www.luogu.org/problemnew/show/P2015 题意:给定一颗结点个数为n的树,有n-1条边,每条边有个权值,树根为1。现在给出q <=n,问剪枝后保留q条边后的边的权值最大是多少。 思路:首先要知道这道题有个隐含条件,如果某条边被保留,那么从根节点 阅读全文
posted @ 2019-07-14 20:04 Frank__Chen 阅读(171) 评论(0) 推荐(0)