网络流 24 题简单sol

最长递增子序列

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

飞行员配对方案问题

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

孤岛营救问题

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

运输问题

建立源汇点 ST
S 向仓库连流量为 ai 费用为 0 的边。
商店向 T 连流量为 bi 费用为 0 的边。
对于 1in, 1jm,连流量为 + 费用为 costi,j 的边。
跑费用流即可。
第二问把 cost 数组取反即可。

数字梯形问题

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

航空路线问题

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

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

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

深海机器人问题

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

太空飞行计划问题

最大权闭合子图板子。

方格取数问题

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

posted @   dd_d  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示
主题色彩