P4843 清理雪道:最小路径覆盖问题的变种
有两种方法:
-
最大费用流。
把网络流作为贪心的工具。
建图:原图中的点也当作新图中的点。对于一条原图的边,新图中建两条:一条容量
费用 ,一条容量 费用 。(深海机器人的方法) 向所有入度 的点(还有出度 向 )连容量 费用 的边。跑最大费用流。这样就视作每一条边第一次走的时候会贡献
,以后不再贡献。在跑最大费用流的时候,如果发现增广完当前费用等于原图中的边数,则退出增广,答案为当前增广的轮数。为什么正确?有没有可能走了反边,增广次数比答案多?
不可能。因为如果有反边,一定是费用
,但是我们有容量 费用 的边。 -
有源汇上下界网络流。
建图:
。 -
二分图。(这个复杂度慢了,但是正确)
跑 Floyd 传递闭包,建出
的闭包 (若 在 中可达 , 中有边 )然后在
上跑最小路径覆盖。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验