树形dp
文章平均质量分 83
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
CSU 1776/BZOJ 4254 Aerial Tramway(树形dp+topsort)
给你n个点,然后每个点有横纵坐标,如果两个点高度相同那么可以建立缆车连接线,但是前提是两点连线之间的点高度必须严格低于他们的高度。给你建立m条缆车路线的任务,问你最多能够使得缆车线路总长度为多少。但是要注意,一定是严格建立m条路线,不能多也不能少,如果建不了那么多则输出-1。最后还有一个限制,任何一个点它上面能够有的缆车路线条数严格小于K。 首先这题很容易往dp方面去想,但是说实话想到树形dp还是不简单的。我们把每一个可以建立的缆车路线想象为一个背包,价值为它的长度,就变成了让你取m个物品,原创 2017-09-01 09:59:54 · 196 阅读 · 0 评论 -
HDU 4863 Centroid of a Tree (树形dp)
少见HDU的题解网上居然少的可怜,仅有的几篇解释的都不太清楚…… 于是自己花了一个晚上的时间理解别人的代码,发现别人的代码虽然是对的,但是写的确实难以理解,所以我决定挑起这个重担,把这道题目解释清楚。 首先,这道题要求子树的重心与原来一样,然后如果原来是两个重心,那么子树同样也得是这两个重心。那么我们先考虑简单的情况,原来的重心假设有两个。由于有两个重心,那么以这两个重心为根的子树的节点数一定相等,即若把连接两个重心的边删除后,树会被分成两棵节点数目相同的树。这个很容易理解,原创 2017-07-24 12:49:03 · 442 阅读 · 0 评论 -
CodeForces 855C Helga Hufflepuff's Cup(树形dp)
给树进行染色,有一个特殊的颜色,要求这个特殊的颜色不能相互连接,然后与特殊颜色相邻的颜色编号必须小于他,问总共的涂色方案。 这题颜色数量看似可以很多很复杂,但是解题的关键就在于对这个颜色的分类。总体来说,我可以把颜色分成三个类:0类颜色表示特殊颜色;1类颜色表示可以和特殊颜色相连的颜色,即编号小于特殊颜色的颜色;2类颜色,表示不能与特殊颜色相连的颜色,即编号大于特殊颜色编号的颜色。这样分类之后,问题一下子简化了非常的多。再加上有特殊颜色数量的最大限制,这个限制最大是10,所以我们可以很容易的原创 2017-09-29 21:30:13 · 521 阅读 · 0 评论 -
HDU 4799 LIKE vs CANDLE ACM/ICPC 2013 Changsha(树形dp)
长沙居然也举办过regional…… 大致题意是,有一个原始的微博,然后大家都去转发它,转发的时候用LIKE和CANDLE分别表示支持和不支持。然后每个人都可以转发其他的微博(可以是原始的也可以是转发的),每个微博都有一定的价值,要计算支持的价值与不支持的价值差最大是多少。你可以选择花X价值去反转一些人的态度,每次反转之后,相应的所有转发过这个人微博的人的态度也会跟着反转。但是有一些微博已经被其他人反转过了,那么你要再次反转它得花价值Y。然后问最后价值差最大是多少。 转换过来原创 2017-09-21 18:35:27 · 379 阅读 · 0 评论 -
计蒜客 2018 ICPC宁夏 Factories (树形dp)
大致题意:给你一棵N个节点的树,然后你要在这个树种选择K个叶子节点建立工厂,使得任意两点之间的距离和要最小。典型的树形dp的题目。我们设dp[x][i]表示在x节点所包的子树内已经选择了i个叶子的最小距离和,那么有状态转移方程dp[x][i]=min(dp[x][i],dp[x][i-j]+dp[son][j]+w*j*(k-j)),其中son表示x的儿子。注意到,dp[x][i]的转移与dp[x][i-j]相关,因此如果正着循环,可能会出现一个叶子节点多次更新一个父亲的情况。所以常规的操作是编程倒着枚举j原创 2018-07-22 12:27:22 · 1560 阅读 · 0 评论 -
2018牛客多校赛第二场 H Travel(树形dp)
大致题意:给你一棵树,每个点上有一个点权,让你找三条不相交的链,使得这三条链的权值和最大。典型的树形dp,但是状态不太好表示。很容易想到,令dp[i][j]表示在点i以及对应子树里面取了j条链的最大权值和。但是在转移的时候,有可能出现一个点的不同儿子中的链合并的情况,仅仅这样表示状态并不能很好的表示转移。所以我增加一维,令dp[i][j][0]表示在点i取了j条链的最大权值...原创 2018-10-03 10:58:34 · 322 阅读 · 0 评论 -
牛客国庆集训派对Day3 B Tree(树形dp + 组合计数)
题意有点绕,其实就是让你求一个点能被多少个点集包含,同时这些点集内的点要相互连通。首先,简单来说,如果只是计算一个有根树中任意一个点被多少个只包含它以及它的子树的点的点集包含,那么直接普通的树上统计的trick就可以搞定。但是现在问题是,点集的点可以是其子树之外的点。我们注意到,对于根来说,它的答案都满足点集里面的点都在它的子树里面,所以说如果能够把每一个点都当作根来计算...原创 2018-10-03 23:54:57 · 566 阅读 · 1 评论 -
WannaFly挑战赛 28 C msc的宠物(二分答案 + 树形dp)
题意相当于是把一棵树分为k+1个部分,然后使得这么多个部分的极差最大值最小。首先考虑直接树形dp,由于是在讨论极差,所以我们要想办法表示极差的状态,但是我们发现仅仅用状态表示极差,并不能够很好的转移,而且极差本身也不好表示。在转移的时候,满足一个子树的极差最小值,在考虑别的节点的时候可能并不是最小值,也就是说子问题是有后效性的,这也就意味这直接用dp是做不了的。所以...原创 2018-11-10 13:03:24 · 660 阅读 · 2 评论 -
CodeForces 1119F Niyaz and Small Degrees(树形dp + multiset)
大致题意:一棵树,每条边都有权值。你可以把一些边给删除,现在问你,当满足所有点的度都小于等于x的时候,删除的边的权值和最小是多少。要求输出x从0到n-1的所有结果。这题是最近遇到过的最麻烦的题,太菜了,做了好久。。。一开始的想法,试图去贪心,寻找一种策略能够保证删边的时候权值和最小。然而显然并没有这种策略。然后考虑x从大到小顺序处理,每次只处理度数为当前x的点。对于当前...原创 2019-04-13 17:06:25 · 410 阅读 · 0 评论