[CF 1984E] Shuffle
思路
首先分析题目
发现删除第一个点之后, 如果剩下单棵子树那么答案最终会加一
否则就是剩下的森林/树的最大独立集
于是问题简化成
题意
给定一棵树, 求以下两种情况之中的最大值:
- 删除一个叶子结点, 剩下的树的最大独立集大小 +
- 树的最大独立集大小
先考虑直接在原树上做
那么最终可以分成以下两种情况
- 最终的独立集中有叶子结点
- 删除一个叶子结点, 答案不降
- 最终的独立集没有叶子结点
- 显然删除一个叶子结点一定使得答案更优
于是可以只讨论删除一个叶子结点之后的情况
也就是对于每个叶子 \(l\), 求删除它之后的最大独立集大小
这变成了一个子问题
子问题
分析题目
给定一棵树
求分别删除每个叶节点后, 剩下树的最大独立集
初步性质
不难发现等价于钦定一个点 为根节点之后, 设其唯一的子节点为 , 相当于求 子树的最大独立集
于是考虑一些换根 做法, 发现利用不到「唯一的子节点」这一信息
考虑这个性质的本质就是在求最大独立集的时候, 我们允许一条连向叶子的边不被支配
转化用于做题
于是设 表示
子树内, 点在不在最大独立集中, 子树中是否有一条连向叶子的边不被支配
转移类似于最大独立集问题
但是特别之处在于, 我们需要合并「是否有一条连向叶子的边不被支配」的信息
然后倘若我们钦定就是不支配这条边, 那么我们可以同时选择这两个点加入最大独立集
总结
最大独立集问题得益于其的约束相邻性, 可以简单的转化为树形 问题
总结
这种算一类特殊问题, 也就是关于一路删点最后剩下的点集必然是独立集
本质上是删点删的是一个点覆盖, 推导得出的结果
关于图上的/树上的特殊集合确实没怎么见过, 长见识了

浙公网安备 33010602011771号