树形 DP 做题记录
1|0树形DP
树形 DP 是一种常见的 DP 形式,具有代表性的有树上背包、换根 DP,基环树上 DP。
一些和路径相关的问题的常见状态是把当前路径已确定的端点数计入状态。
还有一些小技巧。比如树上背包如果必须选择根节点,可以直接在 dfs 序上进行转移。
1|1CF1146F Leaf Partition
题意:有一棵树,定义
思路:树形dp。发现对于一个点,如果子树只传上来一条链,那么必须和其他链合并,否则就可以不和其他的合并,于是设
于是就做完了。
1|2CF1394D Boboniu and Jianghu
题意:有一棵
现在要求把这棵树剖分成若干条链(链包括端点),使每条边恰好出现在一条链中,且要求链上的点的
求在所有剖分方案中,链的总权值最小为多少。
思路:一眼树形DP,直接维护
其实正解也差不多,重点当
1|3CF1499F Diameter Cuts
题意:给定一棵
思路:直接DP就可以。设
1|4[AGC010C] Cleaning
题意:一棵树,第
思路:看到路径加就往树上差分上想,果不其然想不出来。
直接考虑求出每个点会向上传多少条路径,那么有
以后遇到一道题不要一直往一个方面想。
1|5CF1442E Black, White and Grey Tree
题意:给一棵树,每个点是灰色(0),白色(1)或者黑色(2)。你每次可以选择一个连通块,然后在这个连通块里面选择一些点,把它们和它们所连的边删去。你不能同时选择黑点和白点。求删完整棵树的最小操作次数。
思路:小清新题。
自己大概想法是树形DP随便搞搞,不过多半是假的。
正解:先考虑只有黑白的情况,那么把同色连通块缩点后,每次的策略就是不断删同色的叶子,因此答案就是直径长度除以二上取整。有一个简单的处理方法是如果两点同色,那么边权为0,否则为1,直接求直径即可。
再考虑有灰色点的情况。这时就相当于是可以把灰色点染成白或黑点,要求最小化直径长度,可以直接DP,设
1|6P3647 [APIO2014] 连珠线
题意:给定一棵树,从里面选出若干个“三连点”的边,使边权和最大。
思路:终于来写连珠线了。
发现蓝线连接的只会是
然后就是换根了,不过有不少细节。
1|7P4202 [NOI2008] 奥运物流
思路:神秘基环树 DP 题。
先考虑怎么算
由于形成的一定是一棵基环内向树,于是假定环长为
综上,我们得到了
因此每次修改一定是把父节点改成
1|8P4297 [NOI2006] 网络收费
思路:好题。
对于两个点,如果异色,那么一定会做
对于路由器,如果和子树里颜色相同的叶子有
因为树是完全二叉树的形态,于是可以考虑把祖先的颜色压进状态里,如同 [JLOI2015] 战争调度一样,每次递归两次,然后设计状态
1|9P4516 [JSOI2018] 潜入行动
题意:给定一棵树,如果在一个节点
思路:很厉害的优化代码长度的方法。
容易想到就是树上背包,状态是
然后就可以根据
正经人谁写大分讨啊。
首先,
1|10P6534 [COCI2015-2016#1] UZASTOPNI
题意:题意是说给定一棵有根树,需要从中选出一些节点符合:每个选中节点的父亲也被选中,任意选中节点在原树对应的子树内所有选中的节点点权连续。选中的所有节点不能有权值相同的。求方案数,其中两个方案不同当且仅当它们选出的点的点权集合不同。
思路:可以给
对于一个点
1|11P9454 [ZSHOI-R1] 巡城
题意:有一张图,保证如果有环那么所有环的交是 1 号点,求从 1 号点开始 dfs,每次随机一个点为出边,每个点的 dfs 序的期望。
思路:好题。
首先考虑树的情况,那么兄弟之间两两贡献的系数是
1|12Fox And Travelling
题意:给定一张
思路:首先,如果图没有什么性质是不好做的,但是可以发现在环上的点一定没发被遍历到,因此可以用类似拓扑排序的方法排除这些点,于是就只会剩下若干有根树、无根树。
对于有根树,直接树上背包即可。
对于无根树,需要以每个点为根算一遍,可以发现每一种包含
最后把所有树的答案用背包合并即可。
1|13CF613D Kingdom and its Cities
题意:给定一棵树,每个询问给出一些关键点,要求删掉最少的点使这些点两两不联通,无解输出-1。
思路:先判无解:只要有一个关键点的父亲也是关键点就无解。因为会被删除的点肯定是这些点中一些点的
1.
如果
如果
如果
2.
最后
1|14P4383 [八省联考 2018] 林克卡特树
题意:在树上选出
思路:WQS二分+树形DP。看到恰好多少条就想到了WQS二分,二分选出一条链的代价,然后用树形DP算出选出多少条链最优。具体的,设
复杂度:
1|15P8352 [SDOI/SXOI2022] 小 N 的独立集(其实这题本来也不是这个题单里的)
题意:给定大小为
思路:一开始以为是普通的树形dp,后来才发现是dp套dp。首先考虑如果是直接求最大权独立集大小,那么就是设
1|16P2515 [HAOI2010] 软件安装
思路:先缩点,然后会形成一棵树,然后考虑怎么树上背包。
有一种很神奇的 DP 方法。
设
1|17Tree Elimination
给定一棵
初始时你有一个空的序列,树上的
现在按照边的编号从小到大考虑每一条边:
-
如果这一条边连接的两个点都有标记,则选择其中的一个点,擦除它的标记并将它的编号放入序列的末端;
-
否则什么都不做。
求能够由上述操作得到的不同的序列数量。
思路:考虑树形 DP。
对于一条边
设
对于
对于
对于
1|18Nested Rubber Bands
题意:给定一棵
你需要将每一个节点画成一个二维平面上闭合几何图形,当且仅当
我们定义一个序列
求好的序列最长可以是多少。
思路:首先有性质:对于一个点
证明:假设还有
于是这个序列一定满足存在一条链使得所有点到链的距离不超过 1,即一条链和直接相邻的点的最大独立集。
设
1|19P1600 [NOIP2016 提高组] 天天爱跑步
题意:给一棵树和若干条路径,每个点有权值
思路:首先,一条路径不好直接处理,可以拆成两段,这样我们就只用考虑从上到下和从下到上的两种路径。
这时就可以类似树上差分,用桶来维护两类路径的答案,在 dfs 时实时维护即可。
1|20[省选联考 2023] 城市建造
题意:给定一张
思路:首先有一些性质。如果两个点被选择,那么如果有一条简单路径连接这两个点,这条路上的所有点都要被选择。由此可以推出,如果一个点双里面选了两个点,那么整个点双都要被选择。因此,建出圆方树,钦定选一个方点表示选择了整个点双,那么我们最终选出的一定是方点的连通块,且删掉这些方点后每个连通块的大小之差不大于
接着可以想到枚举连通块大小
然后我们考虑如何计数。
设
当
当
1|21[省选联考 2023] 填数游戏
题意:Alice 和 Bob 是一对好朋友。今天,他们约好一起玩游戏。一开始,他们各自有一张空白的纸条。接下来,他们会在纸条上依次写
Alice 需要保证她写下的第
Alice 喜欢相同,因此,她希望她写下的数与 Bob 写下的数对应位置相同的个数尽量多。Bob 喜欢不同,因此,他希望他写下的
即设 Alice 写下的数为
- Alice 希望最大化
- Bob 在保证
互不相同的前提下希望最小化 。
你首先想知道 Bob 能否保证他写下的
思路:题意转化为:每个
因为每个点最多被一条边指定,所以有
先考虑基环树,对于不在环上的边,只能是叶向的,而且环上的边的方向必须一致,所以只有两种情况,很容易计算。
再考虑树的情况,Bob的选择一定是形如钦定一个点为根,所有边都是相对这个点叶向的,这样一共有
总复杂度
1|22[八省联考 2018] 林克卡特树
题意:在树上选出
思路:WQS二分+树形DP。看到恰好多少条就想到了WQS二分,二分选出一条链的代价,然后用树形DP算出选出多少条链最优。具体的,设
复杂度:
1|23P4649 [IOI2007] training 训练路径
题意:给定一个无向图,你需要删掉一些边,使得此图没有长度为偶数的简单环。删掉第
思路:没看出最终是个仙人掌,输麻了。
首先,把会形成偶环的非树边删掉,这时只剩一些奇环,我们发现,如果有一条边同时出现在两个奇环里,那么就会形成一个偶环,因此每条边至多出现在一个环里,即这张图是个仙人掌。
于是就可以 DP。先变成求可以留下的非树边权值的最大值。我们设
1|24[ARC121F] Logical Operations on Tree
题意:给定一棵树,给每个点填
思路:考场上什么都想到了,就是 DP 有一步没想通。
首先,策略肯定是先把 AND 的边缩起来,因此合法的条件就是有一个 1 点周围都是 OR 边或者一个 AND 边连通块内都是 1 点。发现这个条件还是比较复杂,考虑补集,就是每个 AND 连通块内至少有一个 0 点。于是就可以 DP。对于一条边,如果当做 OR 边就相当于是把连通块割开。
设
-
-
。
1|25P4895 独钓寒江雪
题意:给定一棵无根树,求其中本质不同的独立集的个数。
思路:好题。
因为是无根树,而且和同构有关,不难想到以重心为根转成有根树。
考虑和正常的求独立集的 DP 不同在哪里,就是如果有同构的子树那么方案数会有重复,于是可以把同构的子树一起处理,可以用组合数计算。
对于两个重心的情况,新建一个节点当做根即可。
1|26P1864 [NOI2009] 二叉查找树
题意:给你一棵treap,你可以通过改变树的形态使得树上所有节点子树访问次数和的和最小,改变形态有代价。
思路:根据二叉查找树的性质,这棵树的中序遍历就是所有点从小到大排序后的结果,而这是无法更改的,可以从这个方面入手。
题目中说可以让点权修改为任意实数,这就意味着可以有相同权值。把权值离散化一下就可以开始 DP 了。
设
1|27P8290 [省选联考 2022] 填树
题意:给一棵树,每个点的点权要么是 0,要么是
思路:首先考虑朴素的暴力。我们枚举所有点权所在的区间
考虑优化。我们发现对于选择的区间
复杂度
1|28[AGC007E] Shik and Travel
题意:一颗
思路:可能算是二分+DP优化(?)。
首先,显然可以二分答案。接着就是判定是否合法。设
这样DP很暴力考虑怎么优化。我们发现,如果有两个合法状态
__EOF__

本文链接:https://www.cnblogs.com/Xttttr/p/18015064.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】