2174. 費用流(費用流,模板題)

活動 - AcWing

給定一個包含?n?個點?m?條邊的有向圖,并給定每條邊的容量和費用,邊的容量非負。

圖中可能存在重邊和自環,保證費用不會存在負環。

求從?S?到?T?的最大流,以及在流量最大時的最小費用。

輸入格式

第一行包含四個整數?n,m,S,T。

接下來?m?行,每行三個整數?u,v,c,w,表示從點?u?到點?v?存在一條有向邊,容量為?c,費用為?w。

點的編號從?1?到?n。

輸出格式

輸出點?S?到點?T?的最大流和流量最大時的最小費用。

如果從點?S?無法到達點?T?則輸出?0

數據范圍

2≤n≤5000,
1≤m≤50000,
0≤c≤100,
?100≤w≤100
S≠T

輸入樣例:
5 5 1 5
1 4 10 5
4 5 5 10
4 2 12 5
2 5 10 15
1 5 10 10
輸出樣例:
20 300

解析:?

對于 n?個節點,m?條邊的流網絡,可以在 O(nm^2)?的時間復雜度內求出該流網絡的 最小費用最大流(最大費用最大流)。

算法步驟:

用 while 循環不斷判斷殘量網絡中是否存在增廣路徑。

對于循環中:

1.找到增廣路徑
2.更新殘量網絡
3.累加最大流量
4.循環結束,得出最大流。

注意: EK 算法原本是用于求最大流的,但是經過嚴格的證明之后,只需要將 EK 算法中找增廣路徑的 bfs 算法替換成 spfa 算法即可。如果要求最小費用最大流,就用 spfa 算法找最短增廣路;如果要求最大費用最大流,就用 spfa 算法找最長增廣路。(注意:由于是使用spfa求最短路,所以費用不能有負環)

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<sstream>
#include<deque>
#include<unordered_map>
#include<unordered_set>
#include<bitset>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
const int N = 5e3 + 10, M = (5e4) * 2 + 10, INF = 0x3f3f3f3f;
int n, m, S, T;
int h[N], e[M], f[M], w[M], ne[M], idx;
int q[N], dist[N], incf[N],pre[N];
bool st[N];void add(int a, int b, int c, int d) {e[idx] = b, f[idx] = c, w[idx] = d, ne[idx] = h[a], h[a] = idx++;e[idx] = a, f[idx] = 0, w[idx] = -d, ne[idx] = h[b], h[b] = idx++;
}bool spfa() {int hh = 0, tt = 1;memset(dist, 0x3f, sizeof dist);memset(incf, 0, sizeof incf);q[0] = S, dist[S] = 0, incf[S] = INF;while (hh != tt) {int t = q[hh++];if (hh == N)hh = 0;st[t] = 0;for (int i = h[t]; i != -1; i = ne[i]) {int j = e[i];if (f[i] && dist[j] > dist[t] + w[i]) {dist[j] = dist[t] + w[i];incf[j] = min(incf[t], f[i]);pre[j] = i;if (!st[j]) {st[j] = 1;q[tt++] = j;if (tt == N)tt = 0;}}}}return incf[T] > 0;
}void EK(int& flow, int& cost) {flow = cost = 0;while (spfa()) {int t = incf[T];flow += t, cost += t * dist[T];for (int i = T; i != S; i = e[pre[i] ^ 1]) {f[pre[i]] -= t;f[pre[i] ^ 1] += t;}}
}int main() {cin >> n >> m >> S >> T;memset(h, -1, sizeof h);for (int i = 1,a,b,c,d; i <= m; i++) {scanf("%d%d%d%d", &a, &b, &c, &d);add(a, b, c, d);}int flow, cost;EK(flow, cost);cout << flow << " " << cost << endl;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717078.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

探索設計模式的魅力:備忘錄模式揭秘-實現時光回溯、一鍵還原、后悔藥、歷史的守護者和穿越時空隧道

?&#x1f308; 個人主頁&#xff1a;danci_ &#x1f525; 系列專欄&#xff1a;《設計模式》 &#x1f4aa;&#x1f3fb; 制定明確可量化的目標&#xff0c;并且堅持默默的做事。 備忘錄模式揭秘-實現時光回溯、一鍵還原、后悔藥和穿越時空隧道 文章目錄 一、案例場景&…

數據結構作業復盤1:字符串疑難雜癥小匯總(字符串賦值,指針數組...)

學校里開始上數據結構了&#xff0c;一開始是從C語言一些相關的基礎開始講起。第一次作業主要是字符串相關的基礎知識以及編程題目。先做了一部分&#xff0c;整理了一下一些字符串隱含的知識和一些易誤易混的概念&#xff0c;算是給自己的一個復盤和歸納。 strcpy函數相關 首…

System Verilog學習筆記(十五)——包的使用

System Verilog學習筆記&#xff08;十五&#xff09;——包的使用 為了使得可以在多個模塊或者類之間共享用戶定義類型&#xff0c;SV添加了包&#xff08;package&#xff09;。用戶自定義的類型例如類、方法、變量、結構體、枚舉類型等都可以在package…endpackage中定義。…

sc-MAVE

Deep-joint-learning analysis model of single cell transcriptome and open chromatin accessibility data單細胞轉錄組和開放染色質可及性數據的深度聯合學習分析模型 在同一個細胞中同時分析轉錄組和染色質可及性信息為了解細胞狀態提供了前所未有的解決方案。然而&#x…

數據結構——基本概念與術語2,抽象數據類型的表示與實現

目錄 1.數據類型 2.抽象數據類型 1.抽象數據類型的形式定義 基本操作定義格式說明 2.抽象數據類型定義舉例&#xff1a;circle的定義 3.抽象數據類型定義舉例&#xff1a;復數的定義 概念小結&#xff1a; 3.抽象數據類型的表示與實現 1.數據類型 2.抽象數據類型 比如一…

Stable Diffusion webui 常用啟動參數

automatic1111 &#xff08;stable diffusion webui開源項目&#xff09; --listen 開啟遠程訪問&#xff0c;局域網內主機可通過ip地址訪問SD webui主機 --share 開啟互聯網訪問&#xff0c;任何主機都可訪問主機&#xff0c;啟動后會在啟動文本上顯示訪問鏈接 --port 通常…

游戲框架搭建

使用框架的目標&#xff1a;低耦合&#xff0c;高內聚&#xff0c;表現和數據分離 耦合&#xff1a;對象&#xff0c;類的雙向引用&#xff0c;循環引用 內聚&#xff1a;相同類型的代碼放在一起 表現和數據分離&#xff1a;需要共享的數據放在Model里 對象之間的交互一般有三…

跨平臺指南:在 Windows 和 Linux 上安裝 OpenSSL 的完整流程

Windows安裝 一&#xff1a;找到安裝包&#xff0c;雙擊即可 https://gitee.com/wake-up-again/installation-package.git 二&#xff1a;按照提示&#xff0c;一步一步來&#xff0c;就可以啦 三&#xff1a;此界面意思是&#xff0c;是否想向創作者捐款&#xff0c;自己視情…

2024最新搭建Mybatis配置教程【超詳細】

為什么要學習mybatis 首先要弄清楚什么是mybatis&#xff1f;我們為什么要學mybatis 學習MyBatis可以幫助開發人員更高效地進行數據庫操作&#xff0c;提高開發效率&#xff0c;并且可以使得應用程序更具可維護性和性能優勢。 我們知道Java程序操作數據庫是通過jdbc與數據庫進…

藍橋杯——矩形拼接

矩形拼接 題目分析 對于一個矩形而言&#xff0c;我可以把它橫著放&#xff0c;而可以把它豎著放&#xff0c;比如下圖&#xff0c; 3個矩形的拼接情況可以通過在紙上畫圖模擬出來&#xff0c;情況有以下三種 ? 圖1 圖3是4條邊&#xff0c;即四邊形。觀察一下什么時候會是四…

IO(Linux)

文件系統 前言1. 回顧關于C文件部分函數2. 一些文件知識的共識3. 相對路徑4. fwrite中的\0 一、文件描述符fd1. 概念2. 系統調用① open 和 close② write③ read 和 lseek 3. 缺省打開的fd 二、重定向1. 原理2. 系統調用dup23. stdout和stderr的區別4. 進程替換和原來進程文件…

【計算機考研】408學到什么程度才能考130?

408考130要比考研數學考130難的多 我想大部分考過408的考生都是這么認為的。408的難點在于他涉及的范圍太廣了&#xff0c;首先如果你要備考408&#xff0c;你要準備四門課程&#xff0c;分別是數據結構&#xff0c;計算機組成原理&#xff0c;操作系統和計算機網絡。 這四門…

kafka學習筆記四(面試題)

[Kafka 常見面試題]如何保證消息的不重復不丟失-阿里云開發者社區 (aliyun.com) 18道kafka高頻面試題哪些你還不會&#xff1f;&#xff08;含答案和思維導圖&#xff09;-阿里云開發者社區 (aliyun.com) Leader Epoch機制解決的是數據丟失或不一致的問題&#xff0c;見下文&…

報錯解決:av.codec.codec.UnknownCodecError: libx264

1. 錯誤信息 今天在使用Pytorch.io和PyAV包的時候出現了這個錯誤&#xff0c;完整的錯誤信息如下所示&#xff1a; ...envs\tf2_py38\lib\site-packages\torchvision\io\video.py", line 92, in write_videostream container.add_stream(video_codec, ratefps)File &qu…

企業計算機服務器中了360勒索病毒如何解密,360后綴勒索病毒處理流程

對于眾多的企業來說&#xff0c;企業的數據是企業發展的核心&#xff0c;越來越多的企業開始注重企業的數據安全問題&#xff0c;但隨著網絡技術的不斷發展與應用&#xff0c;網絡黑客的攻擊加密手段也在不斷升級。近期&#xff0c;云天數據恢復中心接到多家企業的求助&#xf…

設計模式—命令模式:探索【命令模式】的奧秘與應用實踐!

命令模式 命令模式是一種行為設計模式&#xff0c;它的主要目的是將請求封裝成一個對象&#xff0c;從而使得請求的發送者和接收者之間進行解耦。 在命令模式中&#xff0c;命令被封裝為一個對象&#xff0c;包含了需要執行的操作以及執行這些操作所需的所有參數。 命令的發送者…

【藍橋杯】2023省賽真題詳解(更新中)

&#x1f40f;小憐憐的簡介&#xff1a; &#x1f496;博客主頁&#xff1a;浣熊小憐憐 &#x1f680;年齡&#xff1a;23 大三在讀 &#x1f4aa;愛好&#xff1a;干飯&#xff0c;運動&#xff0c;碼代碼&#xff0c;看書&#xff0c;音樂 &#x1f389;歡迎關注&#x1f50d…

Vue3 v-for循環獲取不到圖片路徑問題

解決辦法 <span>{{item.title}}</span> 通過本地靜態文件獲取img的地址即可展示圖片 url:"/src/assets/comImgs/txt1.png",

OpenGuass 之 where 1 = 0 處理流程代碼走讀

一. 前言 在OpenGuass中&#xff0c;如果where 條件中包含where 1 0 等固定為否條件的查詢語句&#xff0c;在生成執行計劃的時候&#xff0c;執行計劃是BaseResult類型&#xff0c;此類型的執行計劃不會進行物理數據掃描&#xff0c;如下所示&#xff1a; 對于非固定為否條件&…

【論文閱讀】多傳感器SLAM數據集

一、M2DGR 該數據集主要針對的是地面機器人&#xff0c;文章正文提到&#xff0c;現在許多機器人在進行定位時&#xff0c;其視角以及移動速度與車或者無人機有著較大的差異&#xff0c;這一差異導致在地面機器人完成SLAM任務時并不能直接套用類似的數據集。針對這一問題該團隊…