DP==树形dp
文章平均质量分 79
Helium_wild
这个作者很懒,什么都没留下…
展开
-
poj1947(Rebuilding Roads 树中独立出m个点 最少切割的边数 树形背包dp)
题目题意: 在n个结点n-1条边的树中取m个点所需要的最少切割的边数。思路: dp[x][j]:以x为根的子树中,取m个点 包括x 所需要最少切割的边数。这个留下的m个点显然是联通的。注意这个dp[x][j]的定义。#include<cstdio>#include<iostream>#include<cstring>#define m(a,b) m......原创 2019-10-06 17:35:58 · 205 阅读 · 0 评论 -
poj1463(Strategic game 炒鸡基础树dp)
题目题意: 一个游戏有n个点,在某些点上放置哨兵,每个哨兵可以监控和它有边相连的点,问监视所有的点需要的最少的哨兵数.dp[i][0]: 第i个点不放哨兵需要的以i为根节点的子树最少需要的哨兵dp[i][1]: 第i个点放哨兵需要的以i为根节点的子树最少需要的哨兵如果某一点不放哨兵,那么他的子节点都需要设一个哨兵。如果某一点放哨兵,那么就从子节点放还是不放中选最小的.#include&......原创 2019-10-06 12:33:46 · 197 阅读 · 0 评论 -
HDU4276(The Ghost Blows Light T时间入口1 出口n 问可得的最大价值 树形dp)
题目题意: 你在一座古墓里盗墓,古墓在T分钟时就会倒塌,你就挂了。古墓有n个房间,每个房间都有一定价值的宝藏,n-1条边,每条边有花费的时间,形成一棵树。如果逃不出去就输出… 如果能逃出去,那么输出能获得的最大价值是多少?思路: 先dfs算出1-n路径需要的时间tmp tmp<T就不能逃出古墓。假如可以逃出古墓。那么把1-n的路径的边长设为0,然后问题就转化为1-n走T的时间内回到1...原创 2019-10-06 12:12:58 · 155 阅读 · 0 评论 -
poj3345(获得m个国家支持的最小花费(得到x支持 则x的子树都免费支持)经典树形背包dp)
题目题意: 有n个国家,你要获取m个国家的支持,获取第i个国家的支持就要给cost[i]的价钱 其中有一些国家是老大和小弟的关系,也就是说,如果你获得了某个老大国家的支持, 那么这个国家的所有子树都会无偿免费支持你。 问最少的花费可以得到M个国家的支持.题解很显然就是树形背包dp。但是 得到老大的支持 可免费得到所有小弟的支持。我不知道怎么在dfs一个一个的儿子的过程中放进去。我就把......原创 2019-10-06 01:00:48 · 431 阅读 · 0 评论 -
poj2486(从1出发 走k步 最多得到多少苹果 不必回到1点 经典树形背包dp)
题目题意: 每个点有一些苹果,从1点出发,走k步最多能拿到多少苹果?思路: 很经典的树形背包dp。#include<cstdio>#include<iostream>#include<cstring>#define m(a,b) memset(a,b,sizeof a)using namespace std;typedef long long ...原创 2019-10-05 23:34:30 · 303 阅读 · 0 评论 -
HDU3586(Information Disturbing 二分+很水的树形dp)
题目题意: 根节点为1的一棵树,删除一些边使叶子节点都不能到达根节点,并且边权和不能大于M,使删除边的最大值最小,并输出这个最大值。 没有删边方案输出-1.注意INF不要开太大。每次叠加会爆int。很水的一题。#include<cstdio>#include<iostream>#include<cstring>#define m(a,b) mems...原创 2019-10-05 21:43:51 · 118 阅读 · 0 评论 -
HDU5758(Explorer Bo 最小链覆盖的 所有链的长度总和最小 树上链dp)
题目题意: 给你1颗树。起点可以在n个点之间任意选择。每次走到头了,转方向或切换到另一个点都花费1个魔法。它想把n-1条道路都经过一遍,但是想花费魔法的次数最少。问最少情况下它走路最短是多少。思路: 首先,一棵树的叶子节点的个数不管以谁为根都是一样的。假如这颗树的叶子节点个数是num。1.num是偶数 那么它使用的魔法次数最少就是num/2,叶子节点两两结合形成链。 2.num是奇数。使用的...原创 2019-10-05 21:06:13 · 545 阅读 · 0 评论 -
HDU1011(Starship Troopers 简单树形dp)
题目题意: 有N个洞穴,M个士兵。N-1个联通的情况。从1号洞穴出发,每个士兵可以消灭20个bug,只要消灭了当前洞穴的所有bug才获得对应的价值hi,并进入与之相连的其他洞穴。比如,1与2,3相连,可以派一部分士兵进入2,一部分进入3。求获得的最大价值。其实初始化我也不会。真的不会。要哭了。假如0个bug 也要派一个士兵去捡价值,但这个士兵可以继续往下走。#include<cst...原创 2019-10-05 10:21:37 · 228 阅读 · 2 评论 -
HDU4003(Find Metal Mineral 树形dp)
题目挺好的一道题。最终状态 这颗子树没有机器人,遍历完离开了,那么一定是1个机器人去完成这颗子树的遍历过程的。所以下面第24行代码里才会有 +2* w;x是由他的每个子树y1 y2 y3…转移过来的,每个子树所有点都要遍历,所以每个子树都一定要选一个。dp[x][j]:最后状态 (x的子树以及x本身)共有j个机器人停留在里面。每到一个儿子y的时候。就是分成k k->[1,j]个机器...原创 2019-10-04 21:23:17 · 171 阅读 · 0 评论 -
HDU1561(The more, The Better 简单树形dp)
题目其实可以发现 建图之后 像2->3 3->4 4->2(a->b 代表a依赖b)这种有冲突的根本不在树里,因为一个点只依赖于一个点,它只有一个父亲。所以我们建树做。#include<cstdio>#include<cstring>#include<iostream>#define m(a,b) memset(a,b,siz...原创 2019-10-04 17:40:14 · 194 阅读 · 0 评论 -
POJ3585(Accumulation Degree 换根dp模板 所有点到所有点的容量)
题目#include<cstdio>#include<cstring>#include<algorithm>#define en '\n'#define m(a,b) memset(a,b,sizeof a)using namespace std;typedef long long ll;const int N=2e5+5;struct E...原创 2019-08-06 15:13:23 · 177 阅读 · 0 评论 -
CF219D Choosing Capital for Treeland(换根dp模板 一个点可任意到达其他节点需要翻转的边数)
题目dp[x]:x想到达所有节点需要翻转的边数。先求出root=1想到所有节点需要翻转的边数。自底向上dfs1。然后自顶详细dfs2。if(fa->y) dp[y]=dp[fa]+1;if(y->fa) dp[y]=dp[fa]-1;(因为本身fa想到达所有的话就必须翻转过来与y这个儿子的 但儿子想到达所有正好这个边可以到达fa emm不多说了 很好理解的对吧)#inclu...原创 2019-08-06 12:27:37 · 173 阅读 · 0 评论 -
HDU2196(Computer 经典换根dp 求一棵树中所有节点能达到的最长距离)
题目博主讲的很好:https://blog.csdn.net/u013480600/article/details/21831363#include<bits/stdc++.h>#define en '\n'#define m(a,b) memset(a,b,sizeof a)using namespace std;typedef long long ll;const ...原创 2019-08-06 11:22:59 · 393 阅读 · 0 评论 -
HDU1520Anniversary party(树形dp模板 父子(相邻节点)不能同时选 最多选多大)
题目题意: 给你一颗树,每个点都有权值,有正有负,随意选取但是父子不能同时选取问你选取的最大的权值和是多少?dp[x][0]:不选x节点 dp[x][1]:选x节点dfs即可完成dp过程 注意dp[x][1]+=val[x]一定刚进dfs就要这样。dp[fa][0]+=max(dp[son][0]+dp[son][1])dp[fa][1]+=dp[son][0];#includ...原创 2019-08-05 21:01:52 · 357 阅读 · 0 评论