Loading

[CF 1984E] Shuffle

思路

首先分析题目

发现删除第一个点之后, 如果剩下单棵子树那么答案最终会加一
否则就是剩下的森林/树的最大独立集

于是问题简化成

题意

给定一棵树, 求以下两种情况之中的最大值:

  • 删除一个叶子结点, 剩下的树的最大独立集大小 + 11
  • 树的最大独立集大小
你可能需要知道怎么求树的最大独立集

比较经典的带权树上最大独立集问题: 没有上司的舞会

不妨令 fi,0f_{i, 0} 表示不选 ii 点的最大独立集, fi,1f_{i, 1} 表示选 ii 点的最大独立集.
转移方程为:
fi,0=json(i)max{fj,0,fj,1}fi,1=json(i)fj,0+wi\begin{aligned} f_{i, 0} &= \sum_{j \in son(i)} \max\{f_{j, 0}, f_{j, 1}\} \\ f_{i, 1} &= \sum_{j \in son(i)} f_{j, 0} + w_i \end{aligned}

本题中不带权, 于是无所谓

先考虑直接在原树上做
那么最终可以分成以下两种情况

  • 最终的独立集中有叶子结点
    • 删除一个叶子结点, 答案不降
  • 最终的独立集没有叶子结点
    • 显然删除一个叶子结点一定使得答案更优

于是可以只讨论删除一个叶子结点之后的情况
也就是对于每个叶子 \(l\), 求删除它之后的最大独立集大小

这变成了一个子问题

子问题

分析题目

给定一棵树
求分别删除每个叶节点后, 剩下树的最大独立集

初步性质

不难发现等价于钦定一个点 ll 为根节点之后, 设其唯一的子节点为 uu, 相当于求 uu 子树的最大独立集
于是考虑一些换根 dp\rm{dp} 做法, 发现利用不到「唯一的子节点」这一信息

考虑这个性质的本质就是在求最大独立集的时候, 我们允许一条连向叶子的边不被支配

转化用于做题

于是设 fu,0/1,0/1f_{u, 0/1, 0/1} 表示
uu 子树内, uu 点在不在最大独立集中, 子树中是否有一条连向叶子的边不被支配

转移类似于最大独立集问题
但是特别之处在于, 我们需要合并「是否有一条连向叶子的边不被支配」的信息
然后倘若我们钦定就是不支配这条边, 那么我们可以同时选择这两个点加入最大独立集

总结

最大独立集问题得益于其的约束相邻性, 可以简单的转化为树形 dp\rm{dp} 问题

总结

这种算一类特殊问题, 也就是关于一路删点最后剩下的点集必然是独立集
本质上是删点删的是一个点覆盖, 推导得出的结果
关于图上的/树上的特殊集合确实没怎么见过, 长见识了

posted @ 2025-03-27 09:11  Yorg  阅读(22)  评论(0)    收藏  举报