
树形dp
acblacktea
永不放弃
展开
-
hdoj 5834 Magic boy Bi Luo with his excited tree 树形dp
假设 1 为 根节点 dp[i][0] 代表从自己出发选择到儿子节点最后必须返回自己的最大价值 dp[i][1] 代表从自己出发选择到儿子节点最后可选择不回来的最大价值 并记录最后选择的离开节点 id[i] 树形dp先跑一遍出来再第二遍 dfs 因为每个节点也可以流向父节点所以要合并 玛德太弱了超级复杂啊!!!!!!!!!!!!!! 分两种情况 一种是这个点正好是父节点的id,也就是父原创 2016-08-17 23:15:23 · 347 阅读 · 0 评论 -
hdoj 2196 Computer 树形dp经典题
首先简单的树形dp求祖宗到儿子的最长距离并记录最短距离是哪个儿子 此时对于每个点只维护了儿子到它的最短距离 还要记录祖宗到它的最短距离这时需要再跑一遍dfs把每个点与祖宗相关的到它的最长边搞出来 经典模型必须熟悉啊!!!!!!#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<ve原创 2016-09-02 13:01:50 · 425 阅读 · 0 评论 -
codeforces 218D Choosing Capital for Treeland 树形DP
给一个有向树每条边可以改变方向求改变的最小边数使其最后连通 先dfs一下求出以1为根的每个点与儿子联通的最小改变数 然后再dfs合并它与父亲的联通信息#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cstdlib>#define maxn 200005using namesp原创 2016-09-02 16:53:13 · 555 阅读 · 0 评论 -
poj 1155 TELE 树形背包dp
dp[i][we] 代表节点为i 给k个消费者提供信号的所赚钱术 这时we就是背包容量,每个子节点的每个dp[son][j] 0 <=j<= num[j]; 就是各个物品了#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define mini -100000000#define maxn 3005原创 2016-09-02 21:09:44 · 501 阅读 · 0 评论 -
poj 1947 Rebuilding Roads 树形dp背包
dp[i][j] 代表以i为根 大小为j需要拆的最小边数 然后dp 注意边界处理对于每个子节点x不连的话dp[i][j] + 1连得话就是 dp[i][j - k] + dp[x][k]; 然后除了根节点最后计算结果都要加1因为还要把跟父节点相关的边拆掉 #include<cstdio>#include<cstring>#include<algorithm>#include<iostrea原创 2016-09-03 15:14:16 · 396 阅读 · 0 评论 -
poj 2486 树形dp
dp[i][j][0] 代表走到第i个点 还能走j步 最后返回i的最大价值 dp[i][j][1] 代表走到第i个点 还能走j步 最后不返回i的最大价值 一般目标来回往返并每步都有消耗的题都是这种记录往返标识的dp#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#define maxn 204u原创 2016-09-03 20:52:46 · 456 阅读 · 0 评论 -
poj 3345 Bribing FIPA 树形dp
dp[i][j] 代表第i个点获取j个体积所需最小价值, 每个物品的体积就是它所支配的子节点的数量,价值就是它的点值了#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<map>#include<vector>#define maxn 205us原创 2016-09-04 11:06:22 · 408 阅读 · 0 评论