网络流&费用流&二分图

NOIP 也许考不到,但是可以拿来骗分也说不定(

算法原理就算了,反正也不需要知道,只需要知道它在干什么并且会建图就行了。

二分图就是左右两部点,同一部内的点无连边,可以考虑建二分图后网络流。

持续放些题。

一些基本理论和建模方式

  • 最小割=最大流

  • 最大权闭合子图

  • 切糕模型

  • 二分图最小点覆盖=最大匹配数

  • 二分图最大独立集=二分图的总顶点数-最大匹配数

  • 最小路径覆盖数=DAG中的点数-二分图最大匹配数(在DAG中选取最少的路径,使每个点仅属于一条路径且路径不可重复)(将每个点拆开,边表示为一个点的出度到另一个点的入度,点拆开的两个部分分属两部)

P3410 拍照

你需要知道什么是最大权闭合子图,即给定一张有向图,每个点都有一个权值(可以为正或负或 0),你需要选择一个权值和最大的子图,使得子图中每个点的后继都在子图中。

做法:考虑网络流,若 u 节点权值非负,su 连一条流量为 val[u] 的边,权值为负则 ut 连一条流量为 |val[u]| 的边。原图上的边流量为 inf,所有正权值减去最小割即是答案,这是板子题,证明懒得证。

[AGC034D] Manhattan Max Matching

不管曼哈顿距离,容易看出这是二分图,暴力 O(n2) 连边后也显然是跑二分图最大权匹配。考虑费用流来做,要建源点 s 向所有左部点连容量 1 边权 0 的边,所有右部点也这么向汇点 t 连边。

考虑优化建图。关于曼哈顿距离的最大值有个trick了:考虑拆绝对值,这样曼哈顿距离的四个坐标取值都有正负号的取值,共16种曼哈顿距离的式子。我们要暴力全部连边的原因是不能简化曼哈顿距离的形式让所有点可以连在固定的几个点上计算。现在可以了,考虑建四个点,让 左部点向这四个点/这四个点向右部点 连一条容量 inf 权值为 ±xi±yi 的边,然后直接跑最大费用最大流就行,这个题保证了两部点的数量相同且要匹配完。需要注意的是本题中曼哈顿距离拆式子的trick不能用在最小值上。

posted @   和蜀玩  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示