【学习笔记】BZOJ4479 吃货jyy
问题等价于,问从 1 1 1出发,经过钦定的 k k k条边的欧拉回路的最小长度。
我们考虑数据分治。
如果 k ≤ 15 k\le 15 k≤15,那么设 d p i , s dp_{i,s} dpi,s表示当前走到 i i i,经过的关键边集合为 s s s的最小长度。直接跑 dijkstra \text{dijkstra} dijkstra即可。复杂度 O ( n 2 n log ( n 2 n ) ) O(n2^n\log(n2^n)) O(n2nlog(n2n))。
如果 k > 15 k>15 k>15,那么考虑先把 k k k条边加进去,那么最多有 7 7 7个连通块,注意到 B e l l ( 7 ) < 1000 Bell(7)<1000 Bell(7)<1000,也就是说直接状压连通性的状态数不会很大,因此设 d p i , s , k dp_{i,s,k} dpi,s,k表示考虑前 i i i条边,连通性为 s s s,点的度数奇偶性为 k k k的最小长度 。复杂度状态比较稀疏,可以通过。
个人以为这个做法是通不过去的。。。
事实上问题可以转述为:每个点的度数为偶数,并且对于关键点都和 1 1 1联通。
那么每个点有 3 3 3种状态:和 1 1 1相连且度为奇数,和 1 1 1相连且度为偶数,以及与 1 1 1不连通。
转移时考虑从外面拉一个点进来,或者在连通块内连一条边。
可以进行若干剪枝,比如先保证连通性,再保证度数的奇偶性。
复杂度
O
(
3
n
log
(
3
n
(
m
+
k
)
)
+
3
n
(
m
+
k
)
)
O(3^n\log (3^n(m+k))+3^n(m+k))
O(3nlog(3n(m+k))+3n(m+k))。嗯,现在合理多了
我是调不对代码的joker
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530077.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2021-12-10 关于自己犯过的错误
2021-12-10 【题解】[CQOI2017] 老C的方块