快捷键

切换暗色模式 CtrlD
搜索 CtrlK
关闭弹窗 Esc
返回顶部 Ctrl
快捷键面板 Ctrl/
C++信息学奥赛打字闯关
首页 闯关训练 段位系统 题库中心
技术博客 新闻资讯
排行榜 信奥社区 成就殿堂 在线留言 AI助手
📑 文章目录

网络流入门:最大流、最小割与实际应用场景

❤️ 880 点赞
💬 0 评论
👁️ 28515 阅读
🔄 更新于 2026-09-17 10:15

网络流是图论中最精彩的部分之一,具有极其广泛的实际应用。

一、基本概念

  • 源点 S:流量的起点

  • 汇点 T:流量的终点

  • 容量 c(u,v):边 (u,v) 允许通过的最大流量

  • 流量 f(u,v):边 (u,v) 实际通过的流量

  • 满足:容量限制、反对称性、流量守恒


二、最大流算法
  1. EK 算法(Edmonds-Karp)

- 基于 BFS 找增广路
- 复杂度 O(VE²)
- 实现简单,但较慢

  1. Dinic 算法(竞赛首选)

- BFS 分层 + DFS 多路增广
- 复杂度 O(V²E),实际远小于此
- 当前弧优化
int dinic(int u, int flow) {
       if (u == T) return flow;
       int rest = flow;
       for (int &i = cur[u]; i && rest; i = nxt[i]) {
           if (dep[to[i]] == dep[u] + 1 && cap[i]) {
               int k = dinic(to[i], min(rest, cap[i]));
               if (!k) dep[to[i]] = 0;
               cap[i] -= k, cap[i^1] += k;
               rest -= k;
           }
       }
       return flow - rest;
   }


三、最小割
最大流 = 最小割(Max-Flow Min-Cut Theorem)

应用:
  • 最小割方案:最大流后从 S 出发遍历残量网络

  • 最小割求解"二者不可得兼"的最优化问题

  • 最大权闭合子图


四、经典建模技巧
  1. 二分图最大匹配 → 最大流

  2. 最小路径覆盖 → 拆点 + 最大流

  3. 最大权闭合子图 → 最小割

  4. 任务分配问题 → 费用流


五、费用流
在最大流的基础上,每条边还有一个单位流量费用,求最大/最小费用最大流:
  • SSP 算法:SPFA + Dinic

  • 处理负权边:用势能(Johnson 的思想)


推荐练习
  • 最大流:洛谷 P3376(模板)

  • 二分图匹配:洛谷 P3386

  • 最小割:洛谷 P1344 追查坏牛奶

  • 费用流:洛谷 P3381 最小费用最大流

💬 评论 (0)

暂无评论,快来抢沙发吧~ 🛋️

在线

给管理员留言

每条留言老师都会认真阅读并回复

📚 课程咨询 🔧 技术求助 💡 建议反馈 🤝 合作联系

留言发送成功!

您的留言已送达管理员后台

追踪码(请保存以便查询回复)
------