网络流 24 题简单sol

最长递增子序列

第一问直接 dp 即可。
第二问考虑最大流。
按照第一问所做的 dp 数组建一张分层图,其中第 \(x\) 层的点都是 \(dp_i=x\)\(i\)
把每个点拆成入点和出点,每个点内入点和出点连一条容量为 \(1\) 的边。
然后考虑给相邻两层之间的点连边。对于第 \(x\) 层的点 \(i\) 和第 \(x+1\) 层的点 \(j\) 之间有边的条件为 \(i<j\)\(dp_i < dp_j\),若满足则连一条流量为 \(1\) 的边。
第三问把点 \(1\) 和 点 \(n\) 限制的边改为 \(+ \infty\) 即可。

飞行员配对方案问题

首先增加源汇点 \(S\)\(T\)
源点向第一个集合连流量为 \(1\) 的边,汇点向第二个集合连流量为 \(1\) 的边,读入的边连流量为 \(+ \infty\) 的边。判边是否有流量即可。

孤岛营救问题

想了半天怎么建模,打开题解一看不是网络流就很离谱。
发现钥匙数量很少,考虑状压。记 \(dis_{x,y,k}\) 表示走到 \((x,y)\),当前钥匙的状态为 \(k\) 的最短路。
bfs 即可。

运输问题

建立源汇点 \(S\)\(T\)
\(S\) 向仓库连流量为 \(a_i\) 费用为 \(0\) 的边。
商店向 \(T\) 连流量为 \(b_i\) 费用为 \(0\) 的边。
对于 \(1 \leq i \leq n,\ 1 \leq j \leq m\),连流量为 \(+ \infty\) 费用为 \(cost_{i,j}\) 的边。
跑费用流即可。
第二问把 \(cost\) 数组取反即可。

数字梯形问题

依旧建立源汇点 \(S\)\(T\)
对于第一问,
源点与第一行的点连流量为 \(1\) 费用为 \(0\) 的边。
最后一行的点与汇点连流量为 \(1\) 费用为 \(0\) 的边。
把每个点拆成入点和出点,连流量为 \(1\) 费用为 \(-a_{i,j}\) 的边。
每个点往左下和右下的点连流量为 \(1\) 费用为 \(0\) 的点。
第二问只需把与汇点连的边和入点与出点连的边连的流量改为 \(+ \infty\) 即可。
第三问在第一问的前提下把除了与源点连的边的流量改为 \(+ \infty\) 即可。

航空路线问题

把每个点拆成入点和出点,连流量为 \(1\) 费用为 \(1\) 的边。
\(1\)\(n\) 的入点和出点连流量为 \(2\) 费用为 \(1\) 的边,因为起点终点要经过两次。
读入的边则将第一个点的出点向第二个点的入点流量为 \(1\) 费用为 \(0\) 的边。
跑出来的最大流即为路径数。
分下列情况讨论。

  • 最大流为 \(2\),那么经过城市数即为最大费用 \(-2\),因为起点终点都经过了两次。
  • 最大流为 \(1\),且有一条边直接连接起点和终点,那么直接从起点走到终点再走回起点即可。
  • 其余情况皆无解。

跑最大费用最大流即可。
求方案的话两遍 dfs 即可。

深海机器人问题

建立源汇点 \(S\)\(T\)
对于所有未到边界的点 \((i,j)\)\((i,j+1)\)\((i+1,j)\) 连一条流量为 \(1\) 费用为 \(x\) 的边和一条流量为 \(+ \infty\) 费用为 \(0\) 的边。
\(S\) 向所有机器人的起点连一条流量为人数费用为 \(0\) 的边。
\(T\) 向所有机器人的终点连一条流量为人数费用为 \(0\) 的边。
跑最大费用最大流即可。

太空飞行计划问题

最大权闭合子图板子。

方格取数问题

最大权闭合子图板子。
对方格黑白染色,源点连黑点,白点连汇点,黑点连白点。

posted @ 2022-03-17 19:57  dd_d  阅读(118)  评论(0编辑  收藏  举报