当前位置: 首页 > news >正文

最小费用最大流算法

最小费用最大流算法

原理

问题:网络中有源点(起点)和汇点(终点),每条边有流量上限和单位流量费用。求:

  1. 从源点到汇点的最大流量
  2. 在流量最大的前提下,总费用最小

核心思想:在找增广路时,选择单位费用之和最小的路径(使用SPFA找最短路)

实现步骤
  1. 建图:使用链式前向星存储(含反向边)
    • 正向边:容量cap,费用cost
    • 反向边:容量0,费用-cost
  2. 算法流程
    • Step 1:用SPFA找费用最短路(记录路径和最小流量)
    • Step 2:沿路径增加流量,更新费用
    • Step 3:重复直到没有增广路
  3. 结果:最大流量 = 所有增广流量之和,最小费用 = 流量×路径费用之和
C++ 模板
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;const int N = 5010, M = 50010, INF = 0x3f3f3f3f;struct Edge {int to, next, cap, cost;
} edges[M << 1];int head[N], cnt;
int pre[N], dis[N], flow[N];
bool vis[N];
int n, m, s, t;  // 点数、边数、源点、汇点void init() {cnt = 0;memset(head, -1, sizeof head);
}void addEdge(int u, int v, int cap, int cost) {// 正向边edges[cnt] = {v, head[u], cap, cost};head[u] = cnt++;// 反向边edges[cnt] = {u, head[v], 0, -cost};head[v] = cnt++;
}bool spfa() {memset(dis, 0x3f, sizeof dis);memset
http://www.xdnf.cn/news/1033921.html

相关文章:

  • 架构下的最终瓶颈:数据库如何破局?
  • ARDM:一款国产跨平台的Redis管理工具
  • React项目常用目录结构
  • 细节致胜:如何重塑反向海淘用户体验
  • MongoDB 事务有哪些限制和注意事项?
  • 系统学习·PHP语言
  • sqli-labs靶场46-53关(综合)
  • c 语言如何将 uint8_t *tg_pFrames的数据给 uint8_t **ppJpg
  • YOLO11中的C3K2模块
  • AORSA关键文件及参数解释
  • Go语言---闭包
  • golang字符串拼接
  • 【MFC 突然被问到,怎么实现一个星星按钮】原来问的是继承xs
  • CTF题目:Apache Flink目录遍历漏洞实战及CVE-2020-17519漏洞分析
  • 标准库转hal库
  • Kafka - 并发消费拉取数据过少故障分析
  • PyTorch张量操作中dim参数的核心原理与应用技巧:
  • 【机械视觉】Halcon—【十三、实例找各个区域面积和中心点】
  • 大模型成长过程-预训练tokenizer
  • 2.5 Rviz使用教程
  • 人工智能学习13-Numpy-规律数组生成
  • pytorch基本运算-梯度运算:requires_grad_(True)和backward()
  • 多个项目的信息流如何统一与整合
  • Spring AI Chat Tool Calling 指南
  • MySQL使用EXPLAIN命令查看SQL的执行计划
  • 13.20 LangChain多链协同架构实战:LanguageMentor实现67%对话连贯性提升
  • [每周一更]-(第144期):Go 定时任务的使用:从基础到进阶
  • mysql 创建大写字母的表名失败
  • HarmonyOS 组件复用 指南
  • React中使用Day.js指南