总结:网络流的最小路径覆盖模型

或许只是一个非常简单的题目类型,但是我智商太低,花了好久才理解这类模型之间的关联。

所以简单总结一下,欢迎指出错误。

原版问题#

问题 1:给定一张 DAG,需要选出最少的路径,覆盖所有点,路径不可有交。

这里直接给出做法:将每个点 u 拆成左部点 u 和右部点 u,对于原图中的一条边 (u,v),在新图中连接 (u,v)。之后新建源汇,连接所有 (S,i)(i,T),则最小路径覆盖 =nmaxflow

蓝书上的理解方式是二分图最大匹配,这里之所以直接写作最大流,是为了更好地扩展到必须使用网络流算法求解的其他变种。

事实上,如果从“匹配”的角度来理解,那么一对匹配点的本质即为选出了某条路径上的一条边。对于未匹配点,未匹配的一个右侧点代表一条所选路径的起点,左端点代表终点。

因此一种天然的构造答案方式是:找出所有未匹配的右侧点,然后顺着往下把路径找出来即可。

这个经典问题可以被视为一类模型极其特殊的例子:对于给定的 DAG,选出一些路径,覆盖所有点。而在这个特例中,每条边费用均为 0,每个点选择次数均恰好为 1。正是因为有这两个条件,我们才可以用“nmaxflow"计算最小路径覆盖。

问题 2:给定一张 DAG,需要选出最少的路径,覆盖所有点,允许路径相交。

对原图进行传递闭包之后就可以转化为上一个问题。

下面总结该问题的几种变式。这几种变式在原版的基础上对一些条件进行了限制。

变式 1:边带权与起点代价#

星际竞速

“瞬间移动”的本质即在经典问题的基础上增加了起点选取的代价。

考虑经典问题的建模方式。Su 的边本质上代表了 u 不是某条路径的起点,也就是说到达 u 的方式是“从某条路径走过来”。

那么我们同样连边 Su,含义为点 u 的到达方式为“作为起点到达”。

再来考虑“边带权”的问题。类比普通二分图匹配与二分图带权匹配的关系,经典问题带权后,我们将最大流改为最小费用最大流即可。

另外,这种变式存在另一种理解方式(最小费用可行流),参见洛谷题解区 zyb 的题解。我没有细看,不知道这种理解方式能不能推广到其他几种变式。

变式 2:限制路径条数#

营救皮卡丘

如果没有路径条数限制,那么本题与变式 1 完全一致。

处理方式也很简单:建一个新点 S,连边SS,容量为 K。接着将所有 Su 全部改为 Su

不过在这道题中,我们没有必要特意将 S 建出,只需要让 0 号点承担 S 的功能即可。

变式 3:多次覆盖,限制结点覆盖次数#

餐巾计划问题

所谓的“快洗”“慢洗”本质上就是从 u 向所有 [u+m,N]v 连边,因此这仍然是一个路径覆盖问题。

大部分题解的理解角度是拆成“早上”“晚上”,如果从路径覆盖的视角理解这种建模方式,“晚上”就是路径覆盖的左部点,“早上”是右部点。

每个点覆盖次数有下限无上限,但显然最优方案下每个点覆盖次数都等于这个下限。

类比普通二分图匹配与二分图多重匹配的关系,修改 Su,uT 的容量即可。

另外,在题解区的一些代码中,左部点集出现了顺次向后连边的情况,这似乎与我们最初建立的二分图匹配模型并不一致。这种现象出现的原因是,如果按照套路建边(uv,v[u+m,N]),边数将会非常多,不可接受。由于本题中左、右部点间的边容量均为 +,费用均为 0,我们可以采取这种方式减少边数。

80 人环游世界

边数有限,多次覆盖,每个点覆盖次数钦定。

有关边数的问题这里不再讨论,参见变式 2

本题中每个点覆盖次数同时存在上下限且相等。我们将 Su,uT 的容量同时修改为限制即可。

对于覆盖次数只有上限的问题,我还没做到过,不过我估摸着类似地改改边权就行了。

变式 4:限制路径数,求最多覆盖点数#

魔术球问题

依照原题给出的限制和关系,我们不难将数字间的匹配关系建成一张 DAG。下面我们要依次覆盖这张 DAG 中的点。

一种比较暴力的思路是,二分答案,然后直接建图跑经典模型。

但显然这样做的时间开销是极大的,不可取。

发现随着覆盖点数的增加,需要的路径数单调不增。因此考虑动态地建出这张图。

具体地,我们从小到大一个个加入新点并建边,然后寻找增广路。如果找不到增广路,说明必须增加一条路径。

posted @   LFCode  阅读(877)  评论(5编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示
主题色彩