P4843 清理雪道:最小路径覆盖问题的变种

有两种方法:

  1. 最大费用流。

    把网络流作为贪心的工具。

    建图:原图中的点也当作新图中的点。对于一条原图的边,新图中建两条:一条容量 1 费用 1,一条容量 + 费用 0。(深海机器人的方法)s 向所有入度 0 的点(还有出度 0t)连容量 + 费用 0 的边。

    跑最大费用流。这样就视作每一条边第一次走的时候会贡献 1,以后不再贡献。在跑最大费用流的时候,如果发现增广完当前费用等于原图中的边数,则退出增广,答案为当前增广的轮数。

    为什么正确?有没有可能走了反边,增广次数比答案多?

    不可能。因为如果有反边,一定是费用 1,但是我们有容量 + 费用 0 的边。

  2. 有源汇上下界网络流。

    建图:(s,i,0,+),(i,t,0,+),(u,v,1,+)

  3. 二分图。(这个复杂度慢了,但是正确)

    跑 Floyd 传递闭包,建出 G 的闭包 G(若 uG 中可达 vG 中有边 (u,v)

    然后在 G 上跑最小路径覆盖

posted @   FLY_lai  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示