树形dp
Winchester_
这个作者很懒,什么都没留下…
展开
-
树形动态规划总结
本文部分题目出自《树的动态规划与构造》一文/*问题可以分解成若干相互联系的阶段,在每一个阶段都要做出决策,全部过程的决策是一个决策序列。要使整个活动的总体效果达到最优的问题,称为多阶段决策问题。动态规划就是解决多阶段决策最优化问题的一种思想方法。因为树可以描述比较复杂的关系,这对选手分析问题的能力有较高的要求,在寻找最优子结构、组织状态时往往需要创造性思维,而且树型动态规划对数原创 2016-07-20 09:19:05 · 1872 阅读 · 0 评论 -
【bzoj1912】[Apio2010] patrol 巡逻 树形dp
题目大意:给你一棵树,你可以连k条边(1题目分析:对于一棵树来说,遍历所有的点最少需要将每条边走两次,即2*(n-1)。显然当k==1时将直径的两个端点相连,便可以使原来直径上的边减少1次,显然最优。当k==2时,只要将原来直径上的边权赋为-1再找一次树的直径即可。最终答案ans=2*(n-1)-dis1-dis2+2;#include#include#include原创 2016-07-21 13:43:20 · 747 阅读 · 0 评论 -
Tyvj P1520 树的直径
http://www.tyvj.cn/p/1520题目大意:求树的直径题目分析:详见本栏目总结。#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define For(i,n) for(in原创 2016-07-20 19:05:16 · 343 阅读 · 0 评论 -
poj 1987 Distance Statistics 点分治
题目大意: 给你一棵树,问两个点对距离题目分析:点分治裸题。dfs处理出每个重心(分治下)到当前子树根节点的距离存在dis数组中,o(n)直接找出。但要注意的是,对于dis所存的距离,只适用于两个不同的子树当中,所以要将位于同一个子树中的方案数减去。#include#include#include#include#include#include#incl原创 2016-07-19 17:09:58 · 766 阅读 · 0 评论 -
vijos 1892 树上的最大匹配问题 树形dp
https://vijos.org/p/1892题目大意:树上的最大匹配是多少? 最大匹配解的方案共有多少组?(首先树可以被看作是一个无向图G.(对于无向图G来说, 其上的最大匹配是边集的一个子集, 满足:(对于G中每一个点来说, 都只有最多一条与之相连的边在这个子集中.(最大匹配就是这个子集大小可以到达的最大值.以上大概就是树上最大匹配的概念。原创 2016-07-18 09:05:51 · 2486 阅读 · 0 评论 -
Codeforces 23 E Tree 树形dp+高精
题目大意:给你一棵树,让你切断一些边,使得剩下的每个连通块的点的个数的乘积最大,输出这个乘积。题目分析: 由于题目要求各个连通块点的乘积,设状态dp[i][j]表示i作为一个连通块时其点个数为j时候的值。每次枚举与当前节点联通的其他节点所已经扩展的总结点数量。则dp[u][i+j]=max(dp[u][i]*dp[v][j]) {其中u为当前节点,v为u的子节点,i,j分别枚举原创 2016-07-15 20:14:45 · 1036 阅读 · 0 评论 -
Codeforces 543 D Road Improvement 树形dp
题目大意:给定n个点的树#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Rep(i,n) for(int i=0;原创 2016-07-15 10:00:53 · 834 阅读 · 0 评论 -
Codeforces 161 D Distance in Tree 树形DP
题目大意:给出一棵n个节点的树,统计树中长度为k的路径的条数(1<=n<=50000 ,1);题目分析:设dp[i][j]表示以i作为长度为j的路径其中一个点的方案数。转移:dp[u][j]+=dp[v][j-1]; 方案计数:ans+=dp[v][j]*dp[u][k-j-1];#include#include#include#include原创 2016-07-15 09:50:11 · 1027 阅读 · 0 评论 -
BZOJ1603 NOI2008 设计路线 树形dp
题目大意:给定一个根节点为1的树,要求在树中找到一些不相交的链,使得每个节点的不便利值得最大值最小,并求出满足条件的方案个数。一个节点的不便利值就是从该节点到根的路径上经过的非链边的条数。题目分析:对于无解的情况是很好处理的,对于题目意思,只要题目所给的是一个森林便可以直接判断无解,即m考虑f[i][j][k]为节点i,不便利值借将狼踩尽的图- 这是由状态直接得到的转移;原创 2016-07-23 22:44:06 · 1284 阅读 · 0 评论 -
BZOJ 1812 Ioi2005 riv 树形dp
题目大意:给定一棵树,每个点有权值,每条边有边权(单向边)。你可以选取K个黑点,使得从每个点移动到距离他最近的黑点的花费(距离*点权)的总和最小。题目分析:先将该树转化成二叉树方便动态规划。由于当前节点i的子树的花费与最近的黑点j有关系。且要记录下当前已经用过几个黑点。所以f[i][j][k]表示当前这棵子树的根节点为i,最近的黑点为j,用了k个黑点的花费。记忆化搜索方便实现。原创 2016-07-23 17:25:26 · 1075 阅读 · 0 评论 -
【bzoj1369】[Baltic2003]Gem 树形dp
题目大意:给定一棵树,要你为他标上权值且两点间权值不能相同。问最小的权值总和为多少。题目分析:WJMZBMR表示这道题并不能用奇数层染色的方法来做。因为可以构造出贪心反例(用大量的叶子节点强迫某个节点选2)。所以考虑树形dp。 设状态f[i][j]表示根节点为i的子树且根节点颜色为j的子树的最小权值。#include#include#include#include#原创 2016-07-21 17:37:20 · 701 阅读 · 0 评论