1 条题解
-
0
自动搬运
来自洛谷,原作者为

Created_equal1
**搬运于
2025-08-24 22:08:35,当前版本为作者最后更新于2019-03-02 21:54:03,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这是一道原题的加强版
考虑这么一个事情:给定一个序列,判断是否能得到
那么就是一开始先不断加边形成一条链,每次强连通分量数量如果变化,就缩链上开头的一部分(这一部分一定要弱联通)
当弱联通之后(就是所有点都被串到链上之后)就可以“为所欲为”了,只要边的数量不超过当前强连通分量数下能达到的边数最大值即可,边数最大值就是把链上开头一段缩起来得到的
这是一个贪心的过程
可以发现明显分成了两个过程
对于两个过程分别dp
第一个过程的dp,设F[n][cnt][x]表示当前链上的前n个点是联通的,强连通分量变化了cnt次,链上的前x个点被缩了起来。这时候边的数量是n−1+cnt条
第二个过程的dp,设G[m][x]表示当前的边数为m,链上的前x个点被缩了起来的方案数。需要满足m≤C(N,2)+C(x,2)
这两个dp显然都可以直接前缀和优化做到O(1)转移
状态都是O(N^3)的,所以时间复杂度也是O(N^3)的
- 1
信息
- ID
- 4210
- 时间
- 1000~3500ms
- 内存
- 1000MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者