![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树形DP
kalilili
双眼闭三年。
展开
-
UVA1218 Perfect Service(染色问题--树形DP)(好题,通法)
题意:一棵树,进行染色,每个没染色的节点恰好和一个染色的节点相连,求染色的节点最少的个数X(以下均以X代表子问题的解) 思路:树形DP,细化状态,从而对每个节点的每种状态互相递推 这里如何细化状态是难点,而且也是这类难题的共同问题 很容易知道每个节点i至少两个状态:dp[i][0]: i没染上色时以i的子树的X。dp[i][1]: i被染色以i为子树的X 但是仅仅这两个状态无法实现状态转移原创 2015-03-14 20:49:57 · 886 阅读 · 0 评论 -
UVA10253 - Series-Parallel Networks(树形DP+(组合) _ 建模很好)(好题)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1194 大致题意: 给你n条边,问你恰好用n条边,能构成几种串并联网络。(串联的各个部分可以任意调换,并联在一起的各个部分也可以任意调换,若通过调换可得,则二者视为等效) 思路:一个n条边的整原创 2015-10-25 00:14:08 · 791 阅读 · 0 评论 -
51nod 1378 夹克老爷的愤怒(树形DP+贪心)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1378 大致题意: 一棵1e5节点的树,安放某些位置,一个位置可以控制距他的距离不超过K的所有节点, 输入树和K,求控制全图(所有节点)需要安放最少的个数 思路: 假如是线性结构,一定是从边界开始每距离2k安放一个,然后最后正好或者再放置一个,这个原创 2015-08-30 10:57:23 · 1420 阅读 · 0 评论 -
POJ3342 Party at Hali-Bula(树的最大独立集-树形DP-刷表法)
题意: 给定一个树,选择若干点,使得选择的结点中任一结点不会和它的子结点同时选择,求能选结点最大数量。同时判断方案数是否为一。 思路:树的最大独立集,用树形dp,dfs一遍找每个结点的父亲,是为了从下向上刷每个结点儿子的最大独立集和and每个结点孙子的最大独立集和的表 判断方案数是否唯一同样在树形dp的同时递推判断即可 算法复杂度可以是线性 //248K 0MS C+原创 2015-03-14 11:55:24 · 1215 阅读 · 0 评论 -
HDU 1520 Anniversary party(树形DP-最大独立集)
大意:很多领导,能形成一个树形关系网,这些领导参加一个party,每个人都有一个能使party活跃的值,但是每个人又不喜欢跟自己的直接领导同时参加party。为使party气氛最好,求最好气氛值。 思路: 法一:对子树的根按两种决策找到状态方程,然后用刷表法 法二:细化状态,dp[i][0],dp[i][1] 分别表示不选i时的最大集和选了i时的最大集 法二的方法更实用,状态细化后更便于找原创 2015-03-29 09:01:28 · 919 阅读 · 0 评论 -
POJ 1463 Strategic game(树形DP-树上的点集覆盖模型)
题意:一城堡的所有的道路形成一个n个节点的树,如果在一个节点上放上一个士兵,那么和这个节点相连的边就会被看守住, 问把所有边看守住最少需要放多少士兵。 思路:和最大独立集的思路差不多,转移方程差不多,用0,1表示子树的根放不放士兵 dp[root][0] += dp[son][1]; dp[root][1] += min(dp[son][1],dp[son][原创 2015-03-29 09:06:12 · 913 阅读 · 0 评论 -
POJ 2486-Apple Tree(树形DP)(难)
题意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值 思路:(思路转自http://blog.csdn.net/libin56842/article/details/10101807) 树形dp,比较经典的一个树形dp。首先很容易就可以想到用dp[root][k]表示以root为根的子树中最多走k时所能获得的最多苹果数,接下去我们很习惯原创 2015-03-29 08:48:22 · 1439 阅读 · 0 评论 -
POJ 1655 Balancing Act(求树的重心--树形DP)
题意:求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. 思路:随便选一个点把无根图转化成有根图,dfs一遍即可dp出答案 //1348K 125MS C++ 1127B #include #include #include #include #include using namespace std; int n; const int N= 20原创 2015-03-15 09:19:40 · 840 阅读 · 0 评论 -
POJ 1849 Two(树的直径--树形DP)(好题)
大致题意:在某个点派出两个点去遍历所有的边,花费为边的权值,求最少的花费 思路:这题关键好在这个模型和最长路模型之间的转换,可以转换得到,所有边遍历了两遍的总花费减去最长路的花费就是本题的答案,要思考,而且答案和派出时的起点无关 求最长路两遍dfs或bfs即可,从任意点bfs一遍找到最长路的一个终点,再从这个终点bfs找到起点 //1032K 79MS C++ 1455B #include原创 2015-03-15 10:55:09 · 1215 阅读 · 0 评论 -
HDU 5593 ZYB's Tree(树形DP 好题(java))
大致题意: 有n = 500000节点的树, 对于每个节点求距离此节点不超过K (K 思路: 题意中的边是通过 “For reading:we have two numbers A and B,let fai be the father of node i,fa1=0,fai=(A∗i+B)%(i−1)+1 for i∈[2,N] .” 这样构造出来的,这只是便于快速读入而已,原创 2015-12-05 23:57:40 · 802 阅读 · 0 评论