[CF 1970G2] Min-Fund Prison (Medium)
前言
发现更好的补题方法, 也是对自信的锻炼吧
现在的能力范围一般指在 \(2400\) 以下的题目, 再往上不知道应该怎么搞了, 可能理解能力不够
就是说, 不管怎么样, 题解只是参考, 用来丰富你的某个部分的理解, 还是要自己独立思考
思路
首先分析题目
真难发现, 题意可以转化为 \((\)事实上我想了 \(\rm{inf}\) 分钟, 要不是一车人秒了这个题, 不然多半就看题解了\()\)
给定一个森林, 要求把森林连成一棵树
最初森林中每个节点都有权值 \(w_i\), 现在要求在连好的树上选择一条边, 使得这条边两侧的权值相差最小
找点性质
这下真的不难发现了, 这条边可以分成两种情况
- 这条边的两个端点分别属于两棵树
- 这条边的两个端点属于同棵树
考虑在这个基础上处理问题
假设最初森林中有 \(n\) 棵树, 不难发现我们要连上 \(n - 1\) 条边
考虑分类讨论
这条边的两个端点属于同棵树
这种情况较为简单, 相当于我们最初有权值对 \(\{\alpha, \beta\}\) 的合法性, 然后可以把每个连通块丢给左右侧, 不难发现可以直接可行性求, 复杂度大概是 \(\mathcal{O} (mn^2)\)
这条边的两个端点分别属于两棵树
发现也不困难
我们相当于对连通块的分配问题, 因此是简单的, 复杂度 \(\mathcal{O} (n^2)\)
鲜花
摘抄一个 \(\rm{Hard}\) 的做法
进一步优化
基于以上分析, 不难写出一个
令 表示考虑到第 个连通块, 最终答案中某一个连通块的大小是 是否可行; 同时令 表示在不断边的情况下, 前面的连通块是否可以构成一个大小为 的连通块
枚举到一个连通块时, 先求出这个连通块所有边双, 缩掉边双成树后, 统计树上每个点子树的大小
此时树上的每条边都是桥, 如果当前选择断掉树上的边, 设断掉后树两侧的节点树分别为 , 则有转移
对 则有转移
, 其中 为连通块大小
最后在 处贡献答案即可, 为连通块个数
直接 dp 即可做到 。注意到 和 均为 , 且转移形式简单, 故可以 优化, 做到 。
总结
很好的补题方法, 大力推广
一种新颖的 \(\rm{dp}\) 优化
也就是特殊问题利用一般性问题优化

浙公网安备 33010602011771号