网络流24题(wll24)

Posted 长庚启明,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络流24题(wll24)相关的知识,希望对你有一定的参考价值。

How to build a map?

by Ciaxin

大体概括 网络流和线性规划24题 中23道的模型与建图思路,以下所有的题目的思路均会向图论方向靠近。





目录





# 飞行员配对方案问题

[link] 每一架飞机需要有一名英国飞行员和一名外籍飞行员。即,英国飞行员 \\(v\\) 与外籍飞行员 \\(u\\) 进行匹配,算出其最大匹配,所以此题模型为二分图的最大匹配

对于二分图最大匹配而言,可由匈牙利算法最大流模型 解决。

在一个流网络中,由点 \\(u\\) 向点 \\(v\\) 的一条边 \\((u,v)\\)\\(f(u,v)=1\\) 可以理解为一个匹配。

很显然由一名外籍飞行员 \\(u\\) 所连向的边 \\((u,v)\\) 有多条,而最后的匹配仅会最多有一条,那就要保证从点 \\(u\\) 流出的流量为 \\(1\\),才能保证最终只会连向一个点 \\(v\\),那么建立源点 \\(s\\),使得 \\(s\\) 到所有的点 \\(u\\) 的流量 \\(f(s,u) = 1\\)

建立一条由点 \\(v\\) 流向汇点 \\(t\\) 的边,使完成的匹配流向汇点 \\(t\\)

\\[S\\xrightarrow\\ \\ 1\\ \\ u_i\\xrightarrow\\ \\ 1\\ \\ v_i\\xrightarrow\\ \\ 1\\ \\ T \\]

最大流二分图的最大匹配,而流过的流量为 \\(0\\) 的边,就是其匹配。





# 太空飞行计划问题

[link]对于每个实验 \\(E_i\\),都会需要一定数量的仪器 \\(I_k\\),需要选出 \\(d\\) 个实验使其净收益最大化。此题模型为最大权闭合子图

但是我们不妨逆向思考,对于所有的实验 \\(E\\),去掉 \\(w\\) 个实验使其净收益最大化,从而转化为 最小割模型。割掉的边即为去掉的某些实验。

同样建立一张流网络,实验 \\(u\\) 与仪器 \\(v\\) 间存在边 \\(f(u,v) = +\\infty\\) 。(从而保证了被割去的边不会是该边)

由于进行每个实验将会获得为 \\(p\\) 的价值,所以用源点 \\(S\\) 连向点 \\(u\\) 流量为 \\(p\\) 的边。

将仪器点 \\(v\\) 连向汇点 \\(T\\),使流量为 \\(c\\) 的边

这样由源点 \\(S\\) 到汇点 \\(T\\) 的增广路中存在 \\(2\\) 种情况:

  1. \\(最终流量 = 赞助费用\\),那么表示流量最终被源点 \\(S\\) 到点 \\(u\\) 的边 \\(e_i\\) 限制,割边即为 \\(e_i\\),说明该实验的仪器费大于赞助费,不能使净收益最大化。
  2. \\(最终流量 \\not= 赞助费用\\),那么表示限制的是花费仪器的边 \\(e_j\\),割边即为 \\(e_j\\),说明进行该实验存在收益。

若对于情况 \\(1\\),用赞助费减去了流量,也就代表了没有进行这次实验;对于情况 \\(2\\),赞助费减去流量为购买完仪器剩下的,即净收益

因为经过计算后的割边流量为 \\(0\\),而源点 \\(S\\),连接着所有的实验 \\(u\\),所以那些与源点联通的实验就是可执行的实验啦。

反边:当我们发现存在一个仪器由两个实验才能完全购买时,可能存在其中一个实验用尽了赞助费,此时好像不与源点 \\(S\\) 联通,但存在反边可以由上述仪器连到该实验,使其联通。

可以理解为这条反边将第两个实验的赞助费部分给予了第一个实验。





# 最小路径覆盖问题

[link]最小路径覆盖,在一个有向无环图(DAG)中,选取最少的路径,使每一个点仅存在与一条路径中。特别的,长度可以为 \\(0\\)。(可以理解为单点)

对于一个简单路 \\(P\\)\\((a,b)\\in P\\),如果它要再覆盖一个点 \\(c\\)(存在点可以被覆盖),那么此时的路径覆盖数将会减一,点 \\(b\\) 也就连向了点 \\(c\\),好像是多了一条匹配(别问我为啥蒟蒻也不知道),但由于点 \\(a\\) 也连向点 \\(b\\) 连了一条边,但由于两个点 \\(b\\) 的含义不太一样(一个是流入的,一个是流出的),这里有个非常套路的套路——拆点!!(把每个点 \\(x\\) 拆作点 \\(x_1\\) 与点 \\(x_2\\)那这样就形成了两条由点 \\(a_2\\) 到点 \\(b_1\\)(作为流入),由点 \\(b_2\\)(作为流出) 到点 \\(c_1\\) 的两条边,也就真真正正的形成了两条匹配。

由于在图中减小了一条路径覆盖,就相当于增加了一条拆点后的匹配,那么可以微微地解释了:

\\[\\Large最小路径覆盖=节点数-新图的最大匹配数(拆点) \\]

那么我们把这个问题转换为了二分图最大匹配问题,从而可以用最大流模型求解。

注意:一个点 \\(a\\) 不可能存在点 \\(a_1\\) 向点 \\(a_2\\) 进行连边。因为不管是点 \\(x_1\\) 还是点 \\(x_2\\) 都只会形成最多一条匹配,所以其流量也为 \\(1\\)





# 魔术球问题

[link]对于柱子来讲,所有的柱子将要把所有的球放入,且每个球只能存在其中一个柱子上,就像是我们要找到一个满足规则 \\(2\\) 的图,使得可以被所有的 \\(k\\) 个柱子覆盖,此题为最小路径覆盖问题

“每次只能在某根柱子的最上面放球“,就像是原来最上面的球 \\(b\\) 与新球 \\(c\\) 产生了接触,原来的球又与下面的球 \\(a\\) 存在接触,就如 \\(b\\) 的下表面与 \\(a\\) 的上表面存在匹配,同 \\(b\\) 的上表面与 \\(c\\) 的下表面存在匹配。那么考虑拆点(把每个点 \\(x\\) 拆作点 \\(x_1\\) 与点 \\(x_2\\)

\\(最小路径覆盖=节点数-新图的最大匹配数(拆点)\\)可知,这个问题就变成求二分图的最大匹配,从而可以用最大流模型求解。

虽然这个题目与求最小路径覆盖数恰恰相反,但我们也可以选择枚举每个可行图(每次加入新的边),来判断是否满足给出的最小路径覆盖数即可。





# 圆桌问题

[link]题意为需要满足一个类似,由点 \\(u_i\\) 连向 \\(r_i\\) 个点 \\(v_j\\),每个点 \\(v_j\\),仅存在 \\(c_j\\) 个入边的图。

如果当 \\(r_i\\)\\(c_i\\) 均为 \\(1\\) 的时候,这个图很明显的是一张二分图的最大匹配,当对 \\(r_i\\)\\(c_i\\) 不存在限制时,这就是一个二分图多重匹配问题

  1. 由于每个单位的代表可向所有的餐桌进行挑选,并且两个代表不能做一个餐桌,所有这每个单位 \\(u\\) 要向所有的餐桌 \\(v\\) 连接一条流量为 \\(1\\) 的边。
  2. 因为每个单位的代表仅有 \\(r_i\\) 个,所以要限制从点 \\(u\\) 流出的流量为 \\(r_i\\),由此建立源点 \\(S\\) 连向点 \\(u\\) 流量为 \\(r_i\\) 的边,从而限制了总的流量。‘
  3. 由于每个餐桌 \\(v\\) 将会被匹配多次,但由于餐桌的座位数量的限制,其最多为 \\(c_i\\) 个,所以最终到达 \\(v\\) 的流量最多为 \\(c_i\\),这时利用汇点的作用,由点 \\(v\\) 连向汇点 \\(T\\) 一条流量为 \\(c_i\\) 的边从而限制了其数量。

由于点 \\(u\\) 向点 \\(v\\) 的流量为 \\(1\\),所以最终如果该流量为 \\(0\\),意味着该单位 \\(u\\) 有代表到了餐桌 \\(v\\),从而得到方案。





# 最长不下降子序列问题

[link]该题需要进行三种不同的询问。

1、计算最长不下降子序列的长度 \\(s\\)

使用动态规划解决该问题,设计状态 \\(f(i)\\) 为以 \\(i\\) 结尾的最长子序列的长度,其当前状态可由前 \\(i-1\\) 个状态转移而来,即

\\[f(i) = \\max \\begincases \\ \\ \\ \\ \\ 1\\\\ f(j) +1\\ \\ \\ \\ (a_i\\ge a_j,i> j) \\endcases \\]

2、有多少个长度为 \\(s\\) 的不重复不下降子序列

由于每个点只能被选中一次,但并不每一个点都将会被选择一次,所以并不满足最小点覆盖的模型,但是此问题模型为最多不相交路径

在DP的过程中,可以发现 \\(i\\) 的状态是由一个满足的 \\(j\\) 转移过来的,就像是由 \\(j\\) 连向了 \\(i\\) 的一条边。

序列中的每个点 \\(i\\) 均可作为这个不下降序列的开端,而仅仅是 \\(\\textLIS=s\\) 的点 \\(j\\) 可以作为这个序列的结尾。

由此可以由源点 \\(S\\) 到每个点 \\(i\\),连接一条流量为 \\(1\\) 的边,由满足的点 \\(j\\) 连向汇点 \\(T\\),连接一条流量为 \\(1\\) 的边,从而可以算出该长度序列的数量。

限制条件:点只能被选中一次。这个问题可以用 拆点 的方法将其两个点中间连接一条流量为 \\(1\\) 的边,得到其解决方法。

3、有多少个不同的长度为 \\(s\\) 的不下降子序列。

限制条件:除 \\(x_1,x_n\\) 的点只能被选中一次

因为限制点的方法是 拆点,那么关于 \\(x_1\\)\\(x_n\\) 的拆点的边的流量可以设置为 \\(+\\infty\\),意味不受选择次数的限制。





# 试题库问题

[link]对于 \\(m\\) 道题的每一个类型 \\(i\\) 需要 \\(k\\) 个试题 \\(j\\),换句话说,就是点 \\(i\\) 要和 \\(k\\)\\(j\\) 进行匹配,从而得到了该问题的模型 二分图多重匹配问题

(与 [圆桌问题](# # 圆桌问题) 相似)可以转换为最大流求解。

对于每个类型 \\(i\\),可以与所有类型为 \\(i\\) 的试题连接一条流量为 \\(1\\) 的边,作为可以选择的情况(匹配)。

每个类型的题有数量为 \\(k\\) 的限制,所以由源点 \\(S\\),连向每个类型 \\(i\\) 流量为 \\(k_i\\) 的边。

又由每个试题 \\(j\\) 最多会被选择一次,所以连向汇点 \\(T\\) 处一条流量为 \\(1\\) 的边。

输出:同样的,匹配后的边即为流量变为 \\(0\\) 的边,输出即可。





# 方格取数问题

[link]在所有的数中,选取部分数(限制)的总和最大。

由于选取的数之间不存在什么联系,而仅有在四个方向的数才会有所制约,可以将理解为边。

一定不存在制约关系的一定是那些奇偶性相同的点,从此可以将其看做一个二分图,其此题为二分图点权最大独立集

首先我们不先去想选中那些数,而是去考虑将所有的数选中,再去删掉某些数。最终的答案就是所有的数的和减去被删掉的数。

在众多模型中,可能会想到 最小割问题。(割:删掉的某些数)

由于最小割是边,所以考虑拆点

但是由于转换成了网络流,存在源点与汇点,所以这个点权可以直接放在其之间(即,边权)。

而流过这些边就意味着选了这个点。若割为该边,即要删掉这个点。1

因为对点 \\(x_i,j\\) 存在影响的是四个方向上的数,其中有边相连,但是这个边又不满足上述边 1的性质,所以将其流量设置为 \\(+\\infty\\)





# 餐巾计划问题

[link]该问题模型是线性规划网络优化。由于该题很明显存在费用,能参考想到用费用流求出。

初读该题目,我会想到的一种做法是:

  1. 将每一天拆作早上晚上两部分,由早上向晚上连接一条流量为 \\(r_i\\) ,花费为 \\(0\\) 的边。
  2. 将源点看做购买处,早上可由此购买 \\(+\\infty\\) 条餐巾,费用为 \\(p\\)
  3. 对于快洗与慢洗,分别由第 \\(i\\) 天的晚上到 \\(i+m\\)\\(i + n\\) 的早上,流量为 \\(+\\infty\\) ,花费为 \\(f,s\\)
  4. \\(i\\) 天晚上,也可以连向第 \\(i+1\\) 天的晚上。
  5. 最后由汇点收集。

当然,这之中存在一些问题。【详细参考】

这里提供另一个建图的方法,

在这一天的干净餐巾来源,有三处:购买得到,慢洗得到,快洗得到。这一天脏的餐巾有三个去处:送去快洗,送去慢洗,扔给下一天处理

因为这一天需要 \\(r_i\\) 个干净餐巾,但是到这一天的干净餐巾可能大于 \\(r_i\\) 个,所以我们让每天恰好只对 \\(r_i\\) 个餐巾单独进行结账。这样就限制了到这一天的干净餐巾的数量。

同样,如果仅仅用一个点无法完成这些操作。所以考虑将第 \\(i\\) 天拆成 “今天需要的餐巾(结账)” \\(i_1\\) 与 “今天需要清洗的 ” \\(i_2\\)

那么存在建图的方案,

  1. 连接一条由源点 \\(S\\) 到点 \\(u_1\\) 的流量为 \\(+\\infty\\),费用为 \\(p\\) 的边。(购买得到)
  2. 由点 \\(u_1\\) 连向汇点 \\(T\\) 进行每一天的结账
  3. 连接一条由源点 \\(S\\) 到点 \\(u_2\\) 的流量为 \\(r_i\\) ,费用为 \\(0\\) 的边,以补充上一步流出的餐巾数。
  4. \\(u_2\\) 作为 “需要清洗的” 步骤,连向三个地方:1、快洗后的一天 \\(a_1\\),慢洗后的一天\\(b_1\\),以及扔给下一天 \\((u+1)_2\\)

这种方案满足了每天恰好会花费一定数量的餐巾的限制。





# 软件补丁问题

[link]初读题目,由于一个部分仅会出现两种情况,正确 或者 错误。设 \\((1,0)\\),表示第 \\(1\\) 个错误不存在(正确),第 \\(2\\) 个错误存在。那所以对于起初的软件可以表示为 \\((1,1,\\dots,1)\\)

而对于一个补丁来说,可以由一个存在错误的状态转移到另一个存在错误的状态,同时花费时间。最终使这个状态全部为 \\((0,0,\\dots,0)\\)

这很容易的让人想到最短路算法,没错这是一个最小转移代价的最短路题目,利用状态压缩简化。

如何建边

由于一个补丁的限制比较严苛,存在 \\(B_1,B_2,F_1,F_2\\) 四个状态。

设当前状态为 \\(x\\),在使用位运算时,

x and B1 == B1 时,就表示 \\(x\\) 存在 \\(B_1\\) 的所有错误。
x and B2 == 0 时,就表示 \\(x\\) 中并不存在 \\(B_2\\) 的错误。

因为 \\(x\\) 可能存在不属于 \\(F_1\\) 的错误,我们会清除掉这些错误,不妨让这个状态先拥有 \\(F_1\\) 的所有状态(or),再进行异或xor操作清除。

新状态 y = ((x or F1) xor F1) xor F2;

将其分为 \\(n+1\\) 点,表示每一个错误状态,若这个补丁在该点是可用的,就将该点连到改变状态后的点,其边权为所用时间。





# 数字梯形问题

[link]这个题目被分为了三个部分,总之来讲还是一个最大权不相交路径问题,这条路径很明显是从最顶端到最底端的一条路径。

最长路可以对一条由起点到终点的路径求最大边权,而此题存在多条路径,由此可以想到最大费用最大流

  • 从梯形的顶至底的 \\(m\\) 条路径互不相交

路径不相交,即为点不相交,边不相交。对于边来说可以将流量设置为 \\(1\\),费用为 \\(0\\) 的边。

而对于点来讲,权值是位于点上的,这时候其实就可以想到拆点的方法,将点权转移到边权,并将流量设置为 \\(1\\)

  • 而对于规则 \\(2, 3\\) 来讲,仅仅是限制了点的流量边的流量

至于流网络的源点与汇点,必然是连在梯形的顶部所有的点,与底部所有的点上,流量均为 \\(1\\),而费用均为 \\(0\\) 的边。而对于 \\(m\\) 条路径的限制,可由一个备用源点 \\(S\'\\) 连到原源点上,流量为 \\(m\\),作为限流的作用。





# 运输问题

[link]由于零售商店需要来自仓库的货物 \\(b_i\\)个,存在第 \\(i\\) 个仓库到第 \\(j\\) 个零售商店费用为 \\(c_i,j\\) 。这种既存在费用限制,又存在数量限制的模型,很easy想到的就是网络费用流的模型

那么这个建图的方式也就呼之欲出了。

  • 由仓库可向零售商店连接一条流量为 \\(+\\infty\\),费用为 \\(c_i,j\\) 的边。

  • 共有 \\(m\\) 个仓库,每个需要 \\(a_i\\) 个单位的货物,这种限制可由源点 \\(S\\),进行限流,连接一条流量为 \\(a_i\\),费用为 \\(0\\) 的边。

  • 由汇点接收所有零售商店的货物,因为每个商店只需要 \\(b_i\\) 个货物,所以由商店向汇点连接一条流量为 \\(b_i\\),费用为 \\(0\\) 的边。

然后就可以分别算出最大费用与最小费用了。





# 分配问题

[link]对于该题,共有 \\(n\\) 个工作分配与 \\(n\\) 个人做,而二者之间并不存在什么制约关系,最多是一个工作只能一个人做罢了。

那么这个模型就与二分图并无两样了,但其中有增加了边权的限制,这个模型就可以为二分图最佳匹配

由于网络流的最大流可以完美的解决二分图匹配问题(详见[飞行员配对方案问题](# # 飞行员配对方案问题)),而现在增加了边权的限制,就如同最大流模型上增加了费用,变成了费用最大流问题是相同的。

  • 由每个工作连向每个人一条流量为 \\(1\\) (一条匹配),费用为 \\(c\\) 的边。
  • 由源点流向工作,由员工流向汇点,流量为 \\(1\\),费用为 \\(0\\) 的边。

模型虽简单,却非常之经典。





# 负载平衡问题

[link]读到该题,一股思路涌现,—— 贪心!(最小代价供求问题)

该题的确可以用贪心解过,但是我们分析另一种思路,由于存在可以由相邻的仓库之间搬运,可以理解为相邻仓库存在连边

对于每个仓库,它开始拥有 \\(k_i\\) 的货物,到最后会拥有 \\(x\\) 的货物。

由题意可知,\\(\\frac1n\\sum_i=1^n k_i=x\\),即先前的货物的总量 \\(=\\) 最后货物的总量

  • 可以设立一个源点连向仓库 \\(i\\),流量为 \\(k_i\\) 的边,作为最先存在的货物,设立一个汇点,由仓库连向,流量为 \\(x\\),表明最后这个仓库拥有 \\(x\\) 的货物,其费用均为 \\(0\\)
  • 而两两相邻的仓库之间存在边,其流量为 \\(+\\infty\\) ,费用为 \\(1\\)

这种建图的方式,可以完美的解决了最后使所有的仓库的数量相等的限制,也比较好理解。

当然存在另一种建图方式,

\\(k_i-x> 0\\) 的仓库,由源点 \\(S\\) 连入,流量为 \\(k_i-x\\),费用为 \\(0\\)
\\(k_i-x<0\\) 的仓库,连入汇点 \\(T\\),使其流量为 \\(x-k_i\\),费用为 \\(0\\)

这种方式,将个别仓库多的货物流向缺少货物的仓库,然后计算费用。





# 最长k可重区间集问题





# 星际转移问题

[link]由题意可以发现每个太空船的停靠周期可能是不相同的,所以无法一步进行完全转移。而太空船是到达月球的唯一方法,对于太空船,具有周期性(受时间影响)。

我们由时间作为条件,可以发现,当第 \\(i\\) 时到第 \\(i +1\\) 时:

  • 位于第 \\(i\\) 时第 \\(j\\) 号太空站的人员,可能会到达第 \\(i+1\\) 时第 \\(j\\) 号太空站。(即未进行移动)
  • 位于第 \\(i\\) 时第 \\(j\\) 号太空站的人员,可能会到达第 \\(i+1\\) 时第 \\(k\\) 号太空站,\\(k\\) 将会受到太空船的影响。

由此我们可以想到这可能是一张分层图最大流(人数),为网络判定

将源点 \\(S\\) 连向第 \\(1\\) 时间的地球上,流量为总人数。

我们枚举时间 \\(t\\),将第 \\(t-1\\) 时间的点连到 第 \\(t\\) 时间的点,会存在两种情况

  1. 不管有没有太空船可坐,都可以由点 \\(u_t-1\\) 连向点 \\(u_t\\),流量为 \\(+\\infty\\)
  2. 有太空船可坐,并由点 \\(u_t-1\\) 连向点 \\(k_t\\),流量为 \\(h_i\\)(太空船人数限制)。

将汇点连到每个时间的月球上,判断其最终流量是否与总人数相等即可。

由于可能存在无法到达的情况,那这种情况是什么呢,即为所有的太空船都不会经过月球(可用并查集判断是否连通)。





# 孤岛营救问题

[link]由于这道题目涉及的知识面比较单一,可以easy地考虑到图论的想法。求出最短时间,那么很有可能是求解其最短路径

但是对于这个题目来说,具有门和钥匙的限制,是不好在同一张图中解决的。(当然你也可以使用搜索大法,将状态全部存起来)。

由于这个图受门和钥匙类型的限制,而这个限制比较小(\\(p\\le10\\)),可以考虑 分层与状压

  • 将图分为 \\(2^p+1\\) 层,每层的编号可以为该层的钥匙状态
  • 若在 \\(x\\) 层得到了新的钥匙,可以将其连到拥有新钥匙的第 \\(y\\) 层,边权为 \\(0\\),位置不变。
  • 若拥有该门类型的钥匙,即可以通过。

我们由第 \\(0\\) 层,即没有任何钥匙的 \\((1,1)\\) 位置跑最短路。

然后对于每一层的 \\((n,m)\\) 位置取得一个最小值,即为答案。(也可以建立汇点直接连接,边权为 \\(0\\))。





# 航空路线问题

[link]很明显,这个题已经告诉了你这个图长啥样,但是对于解决问题还是远远不够的。

从最西端城市出发,单向从西向东途经若干城市到达最东端城市,然后再单向从东向西飞回起点(可途经若干城市)。

对于这条限制(误导信息)的理解极为重要,其实不管对于从东到西,还是从西向东,总之是在两端城市间晃悠。

所以这个问题可以化为求两个最长不相交路径的长度,其中起点与终点相交(可重复2遍)。

因为点的经过次数的限制,那么可以考虑将这个点进行拆点操作,用最大流解决,使其流量为 \\(1\\)。(起点与终点为 \\(2\\)

最后对流量为 \\(0\\) 的边遍历两遍输出路径即可。

可能出现只能飞一遍的情况,(最终流量至于 \\(1\\) )这种情况视为无解。





# 汽车加油行驶问题

[link]对于这样的具有限制的,且限制较小的最短路问题,可以考虑将这个限制变成新的一维,将原本的二维网格变为新的三维图形,即分层

对于该题,很明显的是一道最短路问题(BFS解决!!),由 \\((1,1)\\) 到达 \\((n,n)\\) 的最短花费(路径)。

但是我们想如果在 \\((x,y)\\) 处建立了油库,那么就很难判断是否汽车到这里时是油库建立前还是之后了。

其中由于新增了油量的限制,所以可以把最短路的 \\(dis_i,j\\) 状态变为 \\(dis_i,j,k\\) 的三维。这样也就可以解决如果在一张图中如何不错误的建立油库,并加油的问题。

(当我们动规状态用不了时,也可以考虑多加几维\\ww)

然后对于每个时期的状态就有了很好的转移,设 \\(0\\le w\\le k\\)

  • 对于油量 \\(k \\neq 0\\) 时,汽车可沿 \\(X\\) 轴或 \\(Y\\) 轴进行移动。即

    \\[(i,j,w)\\xrightarrowB(i-1,j,w-1)\\ 或\\ (i,j-1,w-1)\\\\ (i,j,w)\\xrightarrow0(i+1,j,w-1)\\ 或\\ (i,j+1,w-1) \\]

  • 但当遇到加油站时,汽车需要严格的进行加油操作,即

    \\[(i,j,w)\\xrightarrowA(i,j,k) \\]

  • 往往我们都会遇到油量变为 \\(0\\) 的情况,又因为题目告诉我们说油量为 \\(0\\) 时,必须建油库,所以对于任意的 \\((i,j,0)\\) 状态都会存在一条连向 \\((i,j,k)\\) 的边。

    \\[(i,j,0)\\xrightarrowA+C(i,j,k) \\]

既然分完层了,那么不管当流量是什么的时候( \\(0\\) 也可以)只要到达 \\((n,n)\\) 就算到达,那么对于所有的 \\((n,n,i)\\) 的位置的最短路径就是答案,当然开始是从 \\((1,1,k)\\) 开始的。





# 深海机器人问题

[link]由于该题是求最优移动问题,即线性规划问题。(当然这个题目不能用最短路做)

由于最短路只能跑一次(多跑几次也一样),也就是只能允许一个机器人跑一遍。

那么多跑几遍?也不是不行。因为最短路的图相当于一个流量只有 \\(1\\) 的流网络,既然这个题目扩大了其“流量”,那么也就可以使用费用流解决

由于已经给出了边权,那么对于每个边权只能有一个机器人接收,那么说,这条边的流量只能为 \\(1\\)

但是题目中有说过 而且多个深海机器人可以在同一时间占据同一位置。

(那么就让这条边流量变为 \\(0\\) 的时候,让流量变为 \\(+\\infty\\),让费用变为 \\(0\\)

很显然用上面的方法是行不通的,而对于改变后的边,(它完全就是一条新的边嘛),我们在建图的时候直接加进去不就好了。

由于这两条边的起始、结束点相同,而费用不同,对于最大费用流来说,肯定是先跑最大费用的边。

所以,这样做是没问题的。





# 火星探险问题

[link]该题也是求最优移动问题,即线性规划问题。

与[深海机器人问题](# # 深海机器人问题)同属于一类题型,但是该题的思维难度会存在微微提升。

对于该题,由于每个石块的位置存在于点上,这对于流网络来讲,是极其不友好的。所以可以考虑将点进行拆点,点权边化。

而由于存在障碍物,即无法达到此处,也就是不存在该边。

最后对于方案的输出,不用多说,沿着流量为 \\(0\\) 的边深搜即可。





# 骑士共存问题

[link]该题目与[方格取数问题](# # 方格取数问题)2的题意极其相像,而做法也是大同小异。

同样每个点会与其周围 \\(8\\) 个点产生制约关系,同样可以将其理解为边。

我们通过手推一个 \\((5\\times 5)\\) 的矩阵(……)

可以发现同样是具有奇偶性相同的点将不会互斥,其中不会存在连边,就像是二分图。而我们的想法是求出最多的不存在连边的点,即二分图最大独立集

而二分图最大独立集与总点数和最大匹配的差相等,也可以用网络流的最小割解决2

对于最小割来讲,可以将奇偶性不同的点分为两部分,其中存在边相连(将流量设置为 \\(+\\infty\\),防止被割掉的不会是点)。

其他由源点到一组点,由另一组点到汇点连边,流量为 \\(1\\)





# 最长k可重线段集问题





# 机器人路径规划问题

[link]这个题呀。。。

后续[wll24]  All code  and  题目链接

编号 题目名称 类型
1 飞行员配对方案问题
2 太空飞行计划问题
3 最小路径覆盖问题
4 魔术球问题
5 圆桌问题
6 最长不下降子序列问题
7 试题库问题
8 方格取数问题
9 餐巾计划问题
10 软件补丁问题
11 数字梯形问题
12 运输问题
13 分配问题
14 负载平衡问题
15 最长k可重区间集问题
16 星际转移问题
17 孤岛营救问题
18 航空路线问题
19 汽车加油行驶问题
20 深海机器人问题
21 火星探险问题
22 骑士共存问题
23 最长k可重线段集问题
24 机器人路径规划问题

以上是关于网络流24题(wll24)的主要内容,如果未能解决你的问题,请参考以下文章

[网络流24题] 软件补丁问题

网络流24题

网络流24题 2/24

网络流 24 题 解题报告

网络流 24 题 解题报告

[网络流24题] 餐巾