网络流 Newnode's pdf 题解

匹配

给定二分图,求是否存在 \(k\) 个完全不同的完备匹配。

  • 每个点度数为 \(k\) 等价于题目要求。
  • 题目转化为求是否存在每个点度数都为 \(k\) 的子图
  • 跑 \(k\) 次匈牙利即可。

SCOI2012 奇怪的游戏

\(n\times m\) 的矩阵上,每处有权值。一次操作可以将相邻的位置同时加 \(1\),求至少要加多少次处处相等。

  • 如果知道最终的值,直接黑白染色二分图即可。
  • 对于 \(2\not|nm\),最终的值可以算出来。
  • 否则,二分最终值大小。

TheTilesDivOne

\(n\times m\) 的黑白染色的有障碍矩阵上,最多能放多少个 L 型。L 型指大小为 \(3\) 的、拐点在黑色上的连通块。

  • 三分图模型:黑白染色分两类,在将黑点按行数奇偶分两类。

CurvyonRails

\(n\times m\) 的有障碍矩阵上,有关键点,用若干环将其完全覆盖,不可重复覆盖。求关键点是拐点的最大值。

  • 环是度数全为 \(2\) 的图,所以度数全为 \(2\) 则一定是环森林。
  • 先假设关键点全是拐点,题目转化为求最少有多少个关键点的两条边同行或同列。
  • 黑白染色,每个点有 \(4\) 条连边 \(2\) 份流量。如果同时流行或同时流列就产生 \(1\) 的费用。

Matrix

给定 \(01\) 矩阵 \(A\),构造矩阵 \(B\),使得 \(A\circ B\) 每行和为 \(u_i\),每列和为 \(v_i\)。

  • 对于流网络中的点 \(v\),其流量守恒

    \[\sum_{(i,v)\in E}f_{(i,v)}=\sum_{(v,j)\in E}f_{(v,j)} \]

    我们可以用这个等式来表示题目中的条件。

  • 此题要求 \(\sum_{j}B_{ij}=u_i\) 和 \(\sum_{i}B_{ij}=v_j\),根据等式我们构造出图:

    二分图,左边 \(n\) 个点,右边 \(m\) 个点;源点向左边点 \(i\) 连边 \(u_i\),右边点向汇点 \(j\) 连边 \(v_j\);\(A_{ij}=1\) 则左侧 \(i\) 向右侧 \(j\) 连 \(+\infty\) 的边。

一流对多流(志愿者招募)

若干区间,每个区间有代价。每个点都要求被覆盖一定的次数。求最小代价。

  • 一流对多流,不能二(三)分图建图。
  • 覆盖次数和最小代价两个限制,考虑费用流。流量限制次数,费用求代价。
  • 令一个区间为 \(l\to r+1\),流量为 \(1\),费用为代价。
  • 我们强制满流限制次数,即 \(i\to i+1\),流量为 \(+\infty-a_i\),\(a_i\) 表示要被覆盖次数。
  • 此时最小费用为最小代价。

区间覆盖

若干区间,每个区间有收益,每个点被覆盖最多 \(k\) 次,求最大收益。

  • 一流对多流,不能二(三)分图建图。
  • 覆盖次数和最大收益两个限制,考虑费用流。流量限制次数,费用求收益。
  • 选中的区间可以分成若干组,满足每组中的区间互不相交。
  • 源点流出 \(k\) 的流量,强制满流,每个流量表示一组。则 \(l\to r+1\) 建边,流量为 \(1\),费用为收益;\(i\to i+1\),流量为 \(k\)。
上一篇:c语言链表从本地文件中读取和写入数据


下一篇:2-4反转链表