
------树形DP
fisty
hi
展开
-
hdu 1520 && poj2342 anniversary party树形DP
每个节点要么选要么不选,和大多数选不选动归一样,来个dp[i][2],0表示不选,1表示不选,那我们只要从叶子节点往根结点不断更新dp[i][0]和dp[i][1]就可以了。 状态转移方程:dp[i[[1] = sum(dp[j][0]) (当前选了,子节点必定不能选,最优的情况是都不选,然后累加)原创 2014-10-31 16:29:11 · 550 阅读 · 0 评论 -
poj 3342Party at Hali-Bula
最大独立集问题,加上判断唯一性入门经典例题,不多说了/*********************************************** * Author: fisty * Created Time: 2015/2/25 13:07:12 * File Name : uva1220.cpp ********************************原创 2015-02-25 14:12:20 · 504 阅读 · 0 评论 -
poj3140 Contestants Division(树形DP)
思路:f[u] 为 以u为结点,它的子孙的所有结点数,因为sum为树的全部结点数,所以 sum - f[u] 为 除了u结点这棵树剩下的结点数。这样的话求差, 就求得了 u结点和他的父节点这跳变断开后两个连通图的差值。注意: 要用long long, 最大值要取到10^9 * n; abs自己写。附f[i] 和 sum - f[i]的关系图一张,方便理解。 /****原创 2015-02-23 15:14:55 · 520 阅读 · 0 评论 -
hdu 2196 computer
题意是求树中每个点到所有叶子节点的距离的最大值是多少。由于对于一个节点来说,可能得到的距离最大的值的路径来自他的子树,或者从他的父节点过来,所以用两次DFS。第一次DFS求出所有节点在他的子树范围内到叶子节点距离的最大值和第二大的值,第二次DFS更新从父节点过来的情况就可以了。因为如果只存最大值的话,判断一个点的从父节点过来的最大值,那么如果他的父节点存的最大值正好是从该点过来的,原创 2015-02-22 13:19:37 · 440 阅读 · 0 评论 -
poj 1655(树形DP 求解重心)
不明白树的重心的先移步树的重心然后 。。就没然后了。。常规做法, 最后输出数的重心所在的结点和把这个结点删除后剩下连通图的最大结点数。原创 2015-02-22 20:28:17 · 584 阅读 · 0 评论 -
Tree Cutting (树形DP)
题意:给一个树状图,有n个点。求出,去掉哪个点,使得剩下的每个连通子图中点的数量不超过n/2。如果有很多这样的点,就按升序输出。n思路:此题是求解树的重心的一个变形,首先要知道什么是树的重心。不明白的先移步树的重心了解一下。根据求解树的重心的方法,设f[i] 为 以i为根的子树的结点个数,那么 f[i] += {f[j] + 1 | j 为i的子结点} 。设dp[i] 为删除结点i,原创 2015-02-22 17:46:21 · 864 阅读 · 0 评论 -
poj 3107 Godfather(树形dp,树的重心)
先附上树的重心的定义:原创 2015-02-22 15:56:14 · 1433 阅读 · 5 评论 -
uva 10859 放置街灯树形dp
首先,本题的优化目标有两个:放置的街灯a应该尽量少;被两灯同时照亮的边数b应该尽量大。为了统一起见,我们把后者替换为:恰好被一盏灯照亮的边数c应该尽量小,然后改用x = Ma+c作为优化目标,其中一个M为很大的正整数。当x取到最小值时,x/M的整数部分是放置街灯的最小值,x%M为恰好被一盏灯照亮的边数的最小值。一般来说,如果有两个需要优化的目标v1和v2时,要求首先满足v1最小,在v1最小的情原创 2014-12-11 16:24:24 · 623 阅读 · 0 评论 -
2015蓝桥杯B组:生命之树(树形DP)
在 X 森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集 S,使得对于 S 中的任意两个点 a,b,都存在一个点列 {a, v1, v2, …, vk, b} 使得这个点列中的每个点都是 S 里面的元素,且序列中相邻两个点间有一条边相连。在这个前提下,上帝要使得 S 中的点所对应的整原创 2015-04-12 21:23:27 · 1688 阅读 · 0 评论