![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划-树形DP
文章平均质量分 91
Maxwei_wzj
AFO
展开
-
(2021-3-19编写)【CSP202012-04】食材运输-状压DP+树形DP
测试地址:食材运输题目大意: n(n≤100)n(n\le 100)n(n≤100)个节点的树,有边权。每个点有的需求,一共可能有K(K≤10)K(K\le 10)K(K≤10)种需求,每个点也可以有多种需求。对于每种需求,需要派遣一个(且只能派遣一个)交通工具,从某点开始,顺着树边遍历所有有这种需求的点,从而满足这些点的需求,边权就是通过这条边所需的时间。现在要求安排M(M≤K)M(M\le K)M(M≤K)个点,使得当所有KKK个交通工具同时从这MMM个点中的某些点出发后,等待需求被满足的时间最长的点原创 2021-03-20 00:47:24 · 1096 阅读 · 1 评论 -
【BZOJ4297】Rozstaw szyn(PA2015)-贪心+树形DP
测试地址:Rozstaw szyn题目大意: 一棵nnn个节点的树有mmm个叶子节点,每个叶子节点有一个权值,要求给所有非叶子节点赋一个权值,使得树上每相邻两个节点的权值差的绝对值之和最小。做法: 本题需要用到贪心+树形DP。一个想法是,随便选一个非叶子节点为根,然后用某种贪心或者DP求出答案。这首先要要求,当每个子树内都达到最优时,整体的答案就最优。我们来分析一下这个问题。首先,对于儿子...原创 2018-09-27 20:55:29 · 272 阅读 · 0 评论 -
【HDU4661】Message Passing-思维+树形DP+组合数学
测试地址:Message Passing题目大意: nnn个人,每个人知道一条独一无二的信息,每次可以选择一个人,向与他有关系的一个人传递所有他已经知道的信息,关系网是树状的,目标是让所有人都知道所有的信息,问有多少种传递信息的方案,使得传递的次数最少。做法: 本题需要用到思维+树形DP+组合数学。首先,显然传递次数的下限是2(n−1)2(n-1)2(n−1),那么我们能不能到达这个下限呢?...原创 2018-10-04 11:39:14 · 994 阅读 · 0 评论 -
【BZOJ5333】荣誉称号(SDOI2018)-找规律+树形DP
测试地址:荣誉称号 做法:本题需要用到找规律+树形DP。 第一次想出Luogu黑题祭。 首先,考虑题目中条件的形式,如果我们令点iii的父亲为点⌊i2⌋⌊i2⌋\lfloor \frac{i}{2}\rfloor(实际上就是在二进制中右移一位),那么所有点可以拼成一棵二叉树,问题就可以表示成:要使树上所有长为k+1k+1k+1的祖孙链上的aaa值之和对mmm的余数为000,点iii上aaa值...原创 2018-08-23 20:19:09 · 333 阅读 · 0 评论 -
【BZOJ4754】独特的树叶(JSOI2016)-树同构:树上哈希
测试地址:独特的树叶 做法:本题需要用到树同构:树上哈希。 问题的关键是如何快速判断两棵树同构。要想到一个确定的算法是很难的,因此我们考虑哈希。 考虑这样一种哈希方法:类似树形DP,对于每个点,先递归求解它的儿子的子树,然后把所有儿子按哈希值排序,然后在这个序列末尾加上一个子树大小的数值,然后把这个序列按字符串哈希的方式求出哈希值,这就是当前子树的哈希值。这样我们可以O(nlogn)O(nl...原创 2018-07-05 19:27:40 · 442 阅读 · 0 评论 -
【BZOJ3899】仙人掌树的同构-圆方树+树上哈希+DP
测试地址:仙人掌树的同构 题目大意:定义一棵仙人掌树为,每个点最多在一个环中的无向图,且图中的环都是简单环。问有多少种点的置换,使得置换后的图和原图相同。n≤1000n≤1000n\le 1000。 做法:本题需要用到圆方树+树上哈希+DP。 首先显然的是,仙人掌同构就等同于圆方树同构。不过这题的仙人掌定义和一般的仙人掌有些不同:是每个点最多在一个环中,而不是每条边。又因为没有重边,所以没有...原创 2018-07-09 18:25:48 · 598 阅读 · 0 评论 -
【BZOJ2159】Crash的文明世界-第二类斯特林数+树形DP
测试地址:Crash的文明世界 做法:本题需要用到第二类斯特林数+树形DP。 直接算式子的话,没办法拆开用其它方式算贡献,所以肯定要把这个式子拆开。 根据第二类斯特林数的性质,有: nk=∑ki=0S(k,i)⋅i!⋅Cinnk=∑i=0kS(k,i)⋅i!⋅Cnin^k=\sum_{i=0}^kS(k,i)\cdot i!\cdot C_n^i 其中S(k,i)S(k,i)S(k,i)...原创 2018-06-22 10:17:47 · 218 阅读 · 0 评论 -
【LOJ2537】Minimax(PKUWC2018)-树形DP+线段树合并
测试地址:Minimax 做法:本题需要用到树形DP+线段树合并。 很快想到一种定义状态的方式:f(i,j)f(i,j)f(i,j)表示点iii的权值为jjj(离散化后)的概率,然后转移时,因为这是棵二叉树,令sonsonson为当前枚举的儿子,sum(j)sum(j)sum(j)为另一个儿子中权值小于jjj的概率,我们有以下状态转移方程: f(i,j)=∑son∑nj=1f(son,j)[...原创 2018-06-21 09:37:47 · 344 阅读 · 0 评论 -
【BZOJ4455】小星星(ZJOI2016)-树形DP+容斥原理
测试地址:小星星 做法:本题需要用到树形DP+容斥原理。 我省省队队长Mychael曰:假紫题,水题。orz。 这题要求的是,对一棵树上每个点求一个映射,使得每一条树边在映射到一个图上后仍存在,求方案数。容易想到以下状态定义: 令dp(i,j,k)dp(i,j,k)dp(i,j,k)为以iii为根的子树,iii映射到jjj,并且子树中的点映射到的点集为kkk的方案数。 然后就可以转移了。...原创 2018-05-16 16:02:14 · 365 阅读 · 0 评论 -
【BZOJ1124】Mafia(POI2008)-环套树DP
测试地址:Mafia做法: 本题需要用到环套树DP。按照题目构图,很显然是我们很熟悉的环套树森林。接下来我们进行分析,最后活下来一些什么人是合法的呢?观察发现,一个人的目标如果是自己那就必死,而没有被作为目标的人一定存活,还有一个特别重要的性质:一个人iii和他的目标aia_iai到最后不可能都存活。在满足这些条件的情况下,我们一定可以构造出一个顺序使得最后存活特定的人。于是问题就非常好分析...原创 2018-10-08 22:01:23 · 323 阅读 · 0 评论 -
【BZOJ3167】SAO(HEOI2013)-高维树形DP+组合数学
测试地址:SAO题目大意: 给定一棵树边是有向边的树(边不一定从根指向儿子),求拓扑序数量。n≤1000n\le 1000n≤1000。做法: 本题需要用到高维树形DP+组合数学。如果边都是从根连向儿子的话,简单组合就可以树形DPO(n)O(n)O(n)做了,问题是这道题并不是这样的,而是一个“类树”的结构,但因为它还是棵树所以我们还是考虑树形DP。考虑用类似树形背包的做法,把子树一一合并...原创 2020-10-11 13:17:47 · 168 阅读 · 0 评论 -
【CF856D】Masha and Cactus-树形DP+LCA+树状数组
测试地址:Masha and Cactus题目大意: 给定一棵树,再给定mmm条边,每条边有权值,从里面选出一些边加入树中,使得形成的图是仙人掌,即每个点至多处在一个环中的图,并使得加入的边的权值和最大,求出这个最大值。做法: 本题需要用到树形DP+LCA+树状数组。首先转化一下问题。不难想到,添加一条边会使得树上的一条路径上的点被一个环覆盖,那么要使一个点至多在一个环中,也就是要求添加的边...原创 2018-12-01 17:54:19 · 485 阅读 · 0 评论 -
【BZOJ1023】仙人掌图(SHOI2008)-圆方树+DP+单调队列
测试地址:仙人掌图 做法:本题需要用到圆方树+DP+单调队列。 看到仙人掌就想到圆方树。我们可以把仙人掌上的DP转化为圆方树上的DP。 首先对于LCA在圆点上的点对,它们之间的距离可以直接通过圆方树的边权算出,所以这一部分直接用树上求直径的DP做就行了。 关键是LCA在方点上的点对,这样的点对之间的最短路径与这个方点所指的环的交是一条链,那么这条路径就分成两个部分:在某点子树中的部分和在环...原创 2018-05-06 16:58:28 · 399 阅读 · 0 评论 -
【BZOJ1487】无归岛(HNOI2009)-圆方树+DP
测试地址:无归岛 做法:本题需要用到圆方树+DP。 很显然题目中所给的图是一个仙人掌,那么这道题要求的就是仙人掌上的最大点权和独立集。 于是我们把仙人掌上的问题转化成圆方树上的问题。圆点上的DP很好处理,像树形DP一样处理即可,主要是方点上的DP,由于方点所在的环和它上面的圆点有两个相邻的点,所以要进行特殊判断,也就是对于一般的情况而言,dp(i,0/1)dp(i,0/1)dp(i,0/1)...原创 2018-05-06 19:54:08 · 386 阅读 · 0 评论 -
【BZOJ2657】旅游(ZJOI2012)-对偶图+树形DP
测试地址:旅游 做法:本题需要用到对偶图+树形DP。 注意到,凸多边形的三角剖分的对偶图是一棵树,这是显然的,因为不可能存在环,而且图一定连通。又注意到,一条线段所经过的一些三角形,它们在对偶图上是一条链,这个也是显然的。而每条链一定对应一条或多条旅游路线,因为凸多边形三角剖分中,一些三角形拼起来一定还是凸多边形,所以一定能找到一条路线对应这条链。得出上述结论后,直接对对偶图求直径即可。 以...原创 2018-04-27 08:48:22 · 303 阅读 · 0 评论 -
【BashuOJ3520】警察局长-最短路树+树上背包+概率DP
【BashuOJ3520】警察局长-最短路树+树上背包+概率DP原创 2017-09-14 22:08:09 · 510 阅读 · 0 评论 -
【BZOJ1040】骑士(ZJOI2008)-环套树+最大权值独立集
【BZOJ1040】骑士(ZJOI2008)-环套树+最大权值独立集原创 2017-06-04 11:49:12 · 478 阅读 · 0 评论 -
【NOI2013T6】快餐店-环套树+树形DP+线段树
【NOI2013T6】快餐店-环套树+树形DP+线段树原创 2017-06-03 16:35:13 · 645 阅读 · 0 评论 -
【NOI2012T4】迷失游乐园-环套树+树形DP+期望DP
【NOI2012T4】迷失游乐园-环套树+树形DP+期望DP原创 2017-06-02 14:52:30 · 529 阅读 · 0 评论 -
【HDU1520】Anniversary Party-树形DP求树的最大权值独立集
【HDU1520】Anniversary Party-树形DP求树的最大权值独立集原创 2017-05-04 10:26:48 · 587 阅读 · 0 评论 -
【NOI2011T4】道路修建-树形DP
【NOI2011T4】道路修建-树形DP原创 2017-03-31 18:36:17 · 400 阅读 · 0 评论 -
【NOI2003T4】逃学的小孩-贪心+树形DP求直径+倍增LCA
【NOI2003T4】逃学的小孩-贪心+树形DP求直径+倍增LCA原创 2017-03-26 18:15:39 · 709 阅读 · 0 评论 -
【APIO2010T2】巡逻-贪心+树形DP
【APIO2010T2】巡逻-贪心+树形DP原创 2017-03-21 17:25:09 · 469 阅读 · 0 评论 -
【BashuOJ2397】计算机网络-树形DP
【BashuOJ2397】计算机网络-树形DP原创 2017-09-10 20:55:15 · 397 阅读 · 0 评论 -
【HDU3586】Information Disturbing-二分答案+树形DP
【HDU3586】Information Disturbing-二分答案+树形DP原创 2017-09-21 22:24:21 · 270 阅读 · 0 评论 -
【BZOJ1060】时态同步(ZJOI2007)-树形DP
【BZOJ1060】时态同步(ZJOI2007)-树形DP原创 2017-10-16 22:01:57 · 300 阅读 · 0 评论 -
【BZOJ4753】最佳团体(JSOI2016)-01分数规划+树形DP
测试地址:最佳团体 做法:本题需要用到01分数规划+树形DP。 首先看到比值,想到01分数规划,按照套路移项后,我们发现这就是一个点权为p−ksp−ksp-ks(kkk为二分的比值)的一个树上背包,直接做就行了,时间复杂度是O(n2logans)O(n2logans)O(n^2\log ans)。 话说我居然忘了树上背包复杂度O(n2)O(n2)O(n^2)的证明……这里简单写一下。我们每...原创 2018-04-25 20:59:57 · 223 阅读 · 0 评论 -
【BZOJ5290】道路(HNOI&AHOI2018)-树形DP
测试地址:道路 做法:本题需要用到树形DP。 去掉题目的各种包装,我们发现整棵树就是棵二叉树,城市就是非叶子节点,乡村是叶子节点。 看到这种树上最优化的问题,一般都会先想到树形DP。一个显然的思路是定义f(i)f(i)f(i)为以点iii为根的子树的最小不便利值,然后在每个点上进行决策,即决定翻修到达该点的公路还是铁路,更新答案。但是我们很快发现一个问题,一棵子树的最小不便利值和并不仅仅跟子...原创 2018-05-02 22:09:13 · 144 阅读 · 0 评论 -
【BZOJ1495】网络收费(NOI2006)-树形DP+状压DP
测试地址:网络收费 做法:本题需要用到树形DP+状压DP。 因为成对的贡献比较难做,我们尝试把贡献算到每一个叶子节点上。我们发现按照题目中的收费方式,它等价于对于每棵子树,A和B哪个更少,就统计这样的贡献:对于每个这种用户iii,如果i,ji,ji,j的LCA是当前子树的根,则累计F(i,j)F(i,j)F(i,j)。为什么等价呢?因为观察计费形式,假设A更少,那么对所有满足LCA为当前根的点...原创 2018-05-09 10:49:45 · 326 阅读 · 0 评论 -
【BZOJ4784】仙人掌(ZJOI2017)-仙人掌判定+树形DP
测试地址:仙人掌 做法:本题需要用到仙人掌判定+树形DP。 首先如果原图就不是仙人掌了,那么再怎么加边肯定也成不了仙人掌,所以我们应该先判断原图是不是仙人掌。判定方法是:对于原图求出DFS树,对于所有不在DFS树中的边,连接的两点一定具有祖孙关系,它会覆盖中间这一段的路径,如果一条边被覆盖一次以上,就表示这条边处于两个或更多个简单环中,不符合仙人掌的定义,树上差分判断一下即可。 特判掉不是仙...原创 2018-04-23 16:45:27 · 603 阅读 · 0 评论 -
【BZOJ3238】差异(AHOI2013)-后缀自动机+树形DP
测试地址:差异 做法:本题需要用到后缀自动机+树形DP。 我们把字符串翻转,那么原串两个后缀的最长公共前缀就变成了两个前缀的最长公共后缀。注意到在后缀自动机上,两个子串的最长公共后缀就是它们在后缀链接上的LCA,那么我们先建出后缀自动机,然后在后缀链接上DP,对于每个点,求以这个点为LCA的所有前缀对对答案的贡献。状态转移方程就不写了,详见代码,算法的总时间复杂度为O(n)O(n)O(n),可...原创 2018-04-02 20:04:21 · 199 阅读 · 0 评论 -
【BZOJ3566】概率充电器(SHOI2014)-树形DP+概率DP
测试地址:概率充电器 做法:本题需要用到树形DP+概率DP。 要求保持充电状态的点的期望数目,根据期望的线性性,我们可以求出每个点保持充电状态的概率pipip_i,然后累加起来。但是我们发现这样的话状态转移方程十分复杂,所以考虑反过来求,求每个点没有被充电的概率。 令down(i)down(i)down(i)为点iii不被它自己和它子树中的点充电的概率,因为一个点的一个儿子不给它充电有两种情...原创 2018-04-07 23:38:09 · 231 阅读 · 0 评论 -
【BZOJ3572】世界树(HNOI2014)-虚树+树形DP
测试地址:世界树 做法:本题需要用到虚树+树形DP。 首先一看这道题我们就知道要用虚树,因此我们先把询问点的虚树先建出来,然后考虑DP。 我们把虚树中每个点受哪个点管辖先求出来,这是通过两次DFS来完成的,一次处理向下方向的最近,一次处理向上方向的最近。然后对于每条虚树上的边,如果边的两端所属的点不同,则表示这条边需要切断,那么我们可以倍增求出断点,在每次切断时求出较下面的那一块的大小即可。...原创 2018-03-07 21:45:24 · 279 阅读 · 0 评论 -
【BZOJ2286】消耗战(SDOI2011)-虚树+树形DP
测试地址:消耗战 做法:本题需要用到虚树+树形DP。 这题如果只有一个询问,相信大家都会做了,比较裸的树形DP。但是询问次数很大,每次询问都O(n)O(n)O(n)DP的话,总的时间复杂度就是O(nm)O(nm)O(nm),无法承受。但是我们发现,总共涉及的询问点数不大,那么我们迫切需要一个关于kkk而不是关于nnn的算法。这时候就要拿出大杀器——虚树了。 虚树其实应该不算是一种数据结构,它...原创 2018-03-07 11:27:35 · 267 阅读 · 0 评论 -
【HDU4035】Maze-期望DP+树形DP
【HDU4035】Maze-期望DP+树形DP原创 2017-03-31 11:32:57 · 426 阅读 · 0 评论