网络流 最小割、费用流

news/2025/9/20 21:26:51/文章来源:https://www.cnblogs.com/dianman/p/19102878

网络流 最小割、费用流

网络流中的割被定义为一种点集的划分方式,源点 \(s\in S\) ,汇点 \(t\in T\)

\((S,T)\) 的容量为 \(c(S,T)\) 表示所有从 \(S\)\(T\) 的边的容量之和

最小割问题就是求一个割 \((S,T)\) 使得这样划分的 \(c(S,T)\) 最小

最大流最小割

一个网格 \(G=(V,E)\) 的最大流就是这个图的最小割

得到一种最小割的划分方式:

void mincut(int u){vis[u] = 1;for (int i = h[u]; i; i = e[i].ne){int v = e[i].v;if (!vis[v] && e[i].c) mincut(v);}
}

求最小割的最少边数:将求了最大流后的图重新建立,把第一遍 Dinic 中剩余容量为 \(0\) 的正向边的边权设为 \(1\)其他正向边设为无穷大反向边都设为零,因为只有流满的边才是最小割中的边

再对这个图做一遍 Dinic 操作,这一次得到的最大流就是最小割所对应的最少边数

for (int i = 0; i < m ; i ++){if (e[i * 2 + 2].c){add(a[i], b[i], 1e9);add(b[i], a[i], 0);}else{add(a[i], b[i], 1);add(b[i], a[i], 0);}
}

费用流

给定的网络种每条边除了有流量限制还存在一个每个单位流量的费用 \(w\),当边 \(e\) 的流量为 \(f\) 时,需要花费 \(f\times w\) 的费用

利用 SPFA 替换掉最大流中寻找增广路的过程,可以正确计算出无负环网络的最小费用最大流

**链式前向星建边时,也要对反向边设置退费 \(**-w\)

for (int i = 0; i < m; i ++){int u, v, c, w;cin >> u >> v >> c >> w;add(u, v, c, w);add(v, u, 0, -w);//反向边
}

SPFA的实现

bool spfa(){memset(dis, 0x3f, sizeof dis);memset(mf, 0, sizeof mf);memset(vis, 0, sizeof vis);queue<int> q;q.push(s);vis[s] = 1;dis[s] = 0;mf[s] = 1e9;while (q.size()){auto u = q.front();q.pop();vis[u] = 0;for (int i = h[u]; i; i = e[i].ne){int v = e[i].v;LL c = e[i].c, w = e[i].w;if (dis[v] > dis[u] + w && c){//计算费用最短路dis[v] = dis[u] + w;mf[v] = min(mf[u], c);pre[v] = i;//ek算法依赖的前驱边数组if (!vis[v]){q.push(v);vis[v] = 1;}}}}return mf[t] > 0;//判断是否存在增广路
}

以 EK 算法为例

pair<int, int> ek(){LL flow = 0;LL cost = 0;while (spfa()){int v = t;while (v != s){int i = pre[v];e[i].c -= mf[t];e[i ^ 1].c += mf[t];v = e[i ^ 1].v;}flow += mf[t];cost += mf[t] * dis[t];//计算当前残留网中的最小费用最大流}return {flow, cost};
}

时间复杂度为 \(O(nmf)\) ,其中 \(f\) 为最大流,但是这是伪多项式时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DP tricks

乱记随机做到的dptricks 交换状态与答案 适用场景:状态大但是答案小AT_dp_e Knapsack 2 CF176D Hyper String AT_agc033_d [AGC033D] Complexity用map存 写出明显存不了的状态的柿子之后 发现只有比较少的几个会有更新…

碎碎念(十七)

awa听风听雨,留云留意 还在怀念过去吗? 那个清晨一起抓住了温柔的风, 那个午后一起接住了淅沥的雨, 那个黄昏一起数清了着火的云, 那个夜晚一起点亮了暗淡的星。那么现在呢? 只能祈祷吹过相同的风, 只能独自撑起…

OpenCV的一些API的使用

本文章会陆续记录一些OpenCV的API方法

AdMergeX与小川科技最右App合作案例入选中国信通院“高质量数字化转型典型案例集” - 实践

AdMergeX与小川科技最右App合作案例入选中国信通院“高质量数字化转型典型案例集” - 实践2025-09-20 21:19 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !importan…

在 macOS 上准备 CentOS 7.5 离线迁移文件的完整指南

在 macOS 上准备 CentOS 7.5 离线迁移文件的完整指南本地使用的是 macOS,但目标机器是 CentOS 7.5,我们需要特别小心地准备兼容的安装包。以下是详细步骤: 准备工作:在 macOS 上设置环境 1. 创建工作目录 mkdir -p…

2971:抓住那头牛

题目 总时间限制: 2000ms 内存限制: 65536kB 描述 农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式: 1、从X移动…

高效测试的第一步:5个用例设计基础思维模型

测试之路,思维先行。掌握这些基础思维模型,让你在测试领域走得更远更稳。欢迎分享你的测试设计经验和心得!在软件开发领域,测试是确保产品质量的关键环节。而对于测试工作来说,测试用例设计无疑是核心中的核心。一…

MFC Button 控件完全指南:从基础到进阶 - 指南

MFC Button 控件完全指南:从基础到进阶 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

Python笔记总结

python简练记录1 Python语言概述 1.1 走进Python 1.1.1 Python简史 一种解释型的、面向对象的、带有动态语义的高级程序设计语言。 使用Python作为语言的名字,因为Guido是英国幽默剧团 Monty Python飞行马戏团的fans。…

vulnhub靶机:GoldenEye-v1

扫描挖掘本地的IP地址信息: nmap -sT 192.168.111.101发现开放了25,80端口 访问http://192.168.111.101:80提示可以访问/sev-home/ ,访问后让我们输入账号密码,查看页面原代码 访问/terminal.js提示账号Boris,Nata…

8465:马走日

题目 总时间限制: 1000ms 内存限制: 65536kB 描述 马在中国象棋以日字形规则移动。 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上…

性能调优之NUMA调优

什么是NUMA NUMA(Non-Uniform Memory Access,非统一内存访问)是一种用于多处理器系统的内存设计架构。在NUMA系统中,每个处理器(或一组处理器)拥有自己的本地内存,处理器访问本地内存的速度比访问其他处理器的内…

深入解析:SpringMVC静态资源与Servlet容器指南

深入解析:SpringMVC静态资源与Servlet容器指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

CCPC Online 2025 游寄

CCPC Online 2025 游寄 赛时 随机 roll 题,先 roll 到 \(K\) 然后没看懂,又 roll 到 \(E\) 谁家好人上来就把两道签到题就 roll 完了() 和队友讨论了一下 \(E\),发现很简单,队友推了个式子过了 回头一看,发现自…

CentOS 7 容器时遇到了 yum update 报错

CentOS 7 容器时遇到了 yum update 报错你在 CentOS 容器中执行 yum update -y 时遇到的错误, ` Loaded plugins: fastestmirror, ovl Determining fastest mirrors Could not retrieve mirrorlist http://mirrorlist…

MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构

现在的文生图模型已经十分强大了,例如我们在输入框敲下 “a photorealistic astronaut riding a horse on the moon”,几秒钟后屏幕生成从未出现过的图像,细节丰富,几近完美。扩散模型(diffusion models)推动了这…

实用指南:光学神经网络与人工智能应用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Zabbix 企业级监控架构实战指南:从搭建、可视化到智能告警

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于MATLAB的视频动态目标跟踪检测搭建方案

基于MATLAB的视频动态目标跟踪检测搭建方案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

第三篇:Windows10/11软件集成与系统优化 - 教程

第三篇:Windows10/11软件集成与系统优化 - 教程2025-09-20 20:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…