树形DP
文章平均质量分 75
提交WA的_请自己跑下看看输出有没问题
这个作者很懒,什么都没留下…
展开
-
POJ 2378 Tree Cutting 1655 Blancing Act
2378:给你一棵树,如果把一个点去掉,则这棵树将会被分割成若干块,如果最大的一个连通块中点的个数不大于N/2,则这个点是符合要求的点,求所有符合要求的点而1655则是求一个点,把它去掉后,得到的若干连通块中有个点的个数最大值,这个最大值比任何其他点进行相同操原创 2011-07-06 18:51:32 · 765 阅读 · 0 评论 -
ural 1018 binary apple tree
给你一棵二叉树,每条边有一个权值,问你保留从根(1)开始的连在一块的Q条边,能获得的最大值是多少先把边上的权值转到点上,N个点N-1条边,即向根连一条虚拟边,权值为0,每条u->v上的权值转到v上dp[i][j]表示以i为根的子树保留j个点的最大收益,这么定义原创 2011-07-05 22:27:36 · 672 阅读 · 0 评论 -
POJ 1935 Journey
给你一棵树,要访问树上的m个节点,并且最后不用返回根,所走的最短距离是多少首先,可以把树上不用走到的地方剪掉,那么叶子节点都是要访问的点要访问所有叶子节点,那么新的树上的每一条边都是有用的,并且只有一个叶子节点访问完后不用返回考虑如果最后要返回根,那么就形成了一条欧拉路径,且每条原创 2011-07-07 19:04:24 · 849 阅读 · 0 评论 -
ural 1056 computer net
树上每个点都有一个距离它最远的点,题目要求所有最远点中,具有最小最远距离的是哪些点一个点,距离它最远的点,要么通过它的父节点到达,要么通过它的某个孩子节点到达,显然,一遍dfs不能得出结果我们先做一遍dfs,求出某点通过孩子节点最多可以向下走多远,这里我们需要记录最大值和次大值然原创 2011-07-08 22:34:16 · 561 阅读 · 0 评论 -
hdu 2415 Bribing FIPA
树形DP,不同的是,只要选择一个根节点i,它的子树中的所有节点也被选择,代价为cost[i]由于dfs时,先遍历子树,再返回根节点,这样,以i为根的子树中的节点可能被多次利用,解决办法就是访问到i时,先开一个tmp数组当前的状态,即dp值,然后访问子树,返回时,先更新tmp值,再原创 2011-07-13 16:22:34 · 1121 阅读 · 0 评论 -
hdu 1561 The more,The better
树形依赖背包,用多叉转换成二叉的形式解决一个节点两个孩子,左孩子是它的孩子中的第一个,右孩子是它的第一个右兄弟,这样一直递归下去,所以只有左孩子是节点的真正孩子dp[i][j]=max{dp[r[i]][j], dp[l[i][k]] + dp[r[i]][j-1-k] +w[i原创 2011-07-13 16:27:01 · 666 阅读 · 0 评论 -
hdu 3721 uvalive 5026 building roads
首先,我们证明一个结论:树的重心一定在树的直径上树的直径指树上最长的一条路径,树的重心指树上所有点中到其余点最远距离最小的点假设重心u不在直径上,那么它到距它最远点(x)的路径一定会和树的直径有交点v,否则这条路径会是新的直径的一部分,那么v到x的距离一定更小,所以重心一原创 2011-09-25 20:11:15 · 1067 阅读 · 1 评论