2194. 負載平衡問題(網絡流,費用流)

活動 - AcWing

G?公司有?n?個沿鐵路運輸線環形排列的倉庫,每個倉庫存儲的貨物數量不等。

如何用最少搬運量可以使?n?個倉庫的庫存數量相同。

搬運貨物時,只能在相鄰的倉庫之間搬運。

數據保證一定有解。

輸入格式

第?1?行中有?1?個正整數?n,表示有?n?個倉庫。

第?2?行中有?n?個正整數,表示?n?個倉庫的庫存量。

輸出格式

輸出最少搬運量。

數據范圍

1≤n≤100
每個倉庫的庫存量不超過?100

輸入樣例:
5
17 9 14 16 4
輸出樣例:
11

解析:?

我們可以計算出最終每個倉庫的貨物數量 x,設第 i?個倉庫的貨物數量是 ai,那么所有貨物一定會分成兩類,一類是 ai>x,即一定會從這些倉庫中流出貨物,另一類是 ai<x,即一定會有貨物流入這些倉庫。

因此我們可以根據這兩類,將所有 ai>x?的倉庫作為左部節點,所有 ai<x?的倉庫作為右部節點。從源點向所有左部節點連邊,容量就是左部節點最開始多出來的貨物,即 ai?x,費用就是 0,因為最開始貨物就在左部節點中。從所有右部節點向匯點連邊,容量就是右部節點缺少的貨物,即 x?ai,費用也是 0,因為最終貨物到右部節點就停止了。然后從每個倉庫向相鄰兩個倉庫連邊,容量是 +∞,費用是 1,表示一次搬運量。

然后還需要證明對應關系,對于任意一個原問題的情況,從源點流進倉庫的流量等于流出的流量(根據上述新圖的定義),滿足流量守恒;又因為根據上述新圖的定義,易知邊一定滿足容量限制,所以原問題的方案對應一個最大流。同時,更具上述的建的新圖,易知流量產生的費用對應一個問題的方案。因此,原問題和新圖的最大流是一一對應的,且數值上相等。

并且可以發現原問題的搬運量就對應的流網絡的可行流的費用,因此最小搬運量就對應了最小費用最大流,用 EK 算法來求即可

#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 = 100 + 10, M = (100*2+100) * 2 + 10, INF = 0x3f3f3f3f;
int n, m, S, T;
int h[N], e[M], f[M],w[M], ne[M],idx;
int q[N], d[N], pre[N], incf[N];
bool st[N];
int p[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(d, 0x3f, sizeof d);memset(incf, 0, sizeof incf);q[0] = S, d[S] = 0, incf[S] = 0x3f;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] && d[j] > d[t] + w[i]) {d[j] = d[t] + w[i];pre[j] = i;incf[j] = min(incf[t], f[i]);if (!st[j]) {q[tt++] = j;if (tt == N)tt = 0;st[j] = 1;}}}}return incf[T] > 0;
}int EK() {int cost = 0;while (spfa()) {int t = incf[T];cost += t * d[T];for (int i = T; i != S; i = e[pre[i] ^ 1]) {f[pre[i]] -= t;f[pre[i] ^ 1] += t;}}return cost;
}int main() {cin >> n;memset(h, -1, sizeof h);S = 0, T = n + 1;int tot = 0;for (int i = 1,a; i <= n; i++) {scanf("%d", &p[i]);tot += p[i];add(i, i < n ? i + 1 : 1, INF, 1);add(i, i > 1 ? i - 1 : n, INF, 1);}tot /= n;for (int i = 1; i <= n; i++) {if (p[i] > tot)add(S, i, p[i] - tot, 0);else if(tot>p[i])add(i, T, tot - p[i], 0);}printf("%d\n", EK());return 0;
}

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

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

相關文章

MySQL - 聯表查詢從表即使有索引依然 ALL 的一個原因

問題描述 今天排查 MySQL 語句性能發現&#xff0c;主外鍵都添加索引了&#xff0c;為什么 explain 分析 type ALL&#xff1f; 原因分析 主表和從表的關聯字段的編碼方式不一樣&#xff0c;改成一樣的編碼方式即可 解決方案 # 修改某張表某字段編碼 ALTER TABLE t_xxx CHA…

STM32CubeMX實戰教程: TIM6、TIM7 - 基本定時器

目錄 一、基本定時器的作用 二、常用型號的TIM時鐘頻率 三、CubeMX配置 四、編寫執行代碼 一、基本定時器的作用 基本定時器&#xff0c;主要用于實現定時和計數功能。作用包括&#xff1a; 定時功能&#xff1a;可以產生周期性的中斷&#xff0c;用于實現定時任務。例如&…

什么是Docker容器?

Docker是一種輕量級的虛擬化技術&#xff0c;同時是一個開源的應用容器運行環境搭建平臺&#xff0c;可以讓開發者以便捷方式打包應用到一個可移植的容器中&#xff0c;然后安裝至任何運行Linux或Windows等系統的服務器上。相較于傳統虛擬機&#xff0c;Docker容器提供輕量化的…

【C++通關攻略 · 基礎篇】輸入輸出語句

目錄 輸入語句 原理 什么是流&#xff1f; 語法 補充 輸出語句 原理 語法 補充 示例 輸入語句 輸入語句&#xff0c;就是用來接受用戶輸入的內容。比如用戶在控制臺輸入一個數字&#xff0c;就可以用輸入語句去就收。 原理 在 C 中&#xff0c;cin 就是最常用的輸入…

linux安裝mysql5.7

linux安裝mysql5.7 一、下載mysql5.7二、解壓包介紹三、上傳包到linux四、卸載mariadb五、安裝mysql六、修改權限七、啟動mysql八、使用過navicat創作不易&#xff0c;筆記不易&#xff0c;如覺不錯&#xff0c;請三連&#xff0c;謝謝~~ 一、下載mysql5.7 去mysql官方下載&am…

MES系統在離散制造企業中的功能解析

隨著信息技術的快速發展和制造業的轉型升級&#xff0c;MES在離散制造企業中的作用日益凸顯。MES系統不僅提高了生產效率和產品質量&#xff0c;還優化了資源配置&#xff0c;增強了企業的市場競爭力。 一、生產管理功能 MES系統能夠實時監控生產現場的各種數據&#xff0c;包…

二叉搜索樹題目:將有序數組轉換為二叉搜索樹

文章目錄 題目標題和出處難度題目描述要求示例數據范圍 解法思路和算法證明代碼復雜度分析 題目 標題和出處 標題&#xff1a;將有序數組轉換為二叉搜索樹 出處&#xff1a;108. 將有序數組轉換為二叉搜索樹 難度 4 級 題目描述 要求 給定整數數組 nums \texttt{nums}…

一、低代碼平臺-數據庫設計規范

數據庫設計規范目的 a、規格化管理各個業務數據表 b、通過字段名稱快速了解表與表之間的關聯關系 c、通過字段第一位快速了解字段數據類型等等所有規范都為了更好的開發與后期系統運維。 1、數據庫設計規范 答&#xff1a;數據庫安裝必須選擇大小寫敏感&#xff1b;編碼格式…

15 easy 141. 環形鏈表

法1&#xff1a;快慢指針法&#xff1a; //給你一個鏈表的頭節點 head &#xff0c;判斷鏈表中是否有環。 // // 如果鏈表中有某個節點&#xff0c;可以通過連續跟蹤 next 指針再次到達&#xff0c;則鏈表中存在環。 為了表示給定鏈表中的環&#xff0c;評測系統內部使用整數…

Python爬蟲副業真的可行嗎?

首先回答你&#xff0c;是可行的&#xff0c;python爬蟲能當副業&#xff0c;副業的方式比較多&#xff0c;等下我會講幾種。 那學到哪個層次可以接單呢&#xff1f;主要看你是接什么樣的單&#xff0c;爬一些資料&#xff0c;視頻這種簡單的學一兩個月就沒什么問題&#xff0…

第一天 走進Docker的世界

第一天 走進Docker的世界 介紹docker的前世今生&#xff0c;了解docker的實現原理&#xff0c;以Django項目為例&#xff0c;帶大家如何編寫最佳的Dockerfile構建鏡像。通過本章的學習&#xff0c;大家會知道docker的概念及基本操作&#xff0c;并學會構建自己的業務鏡像&…

一文讀懂Persistence One- 如何將Restaking帶入Cosmos

Persistence One正在將Restaking引入Cosmos。用戶將能夠通過pSTAKE、Stride、Quicksilver和Milkyway將Liquid Staked Tokens&#xff08;如ATOM、TIA、DYDX等&#xff09;存入Persistence One&#xff0c;對其進行Restaking&#xff0c;從而安全地連接更多區塊鏈&#xff0c;首…

MySQL:數據庫中有哪些鎖

1、全局鎖 加上全局鎖后整個數據庫就處于只讀狀態了&#xff0c;這時其他線程執行以下操作&#xff0c;都會被阻塞&#xff1a; 對數據的增刪改操作&#xff0c;比如 insert、delete、update等語句&#xff1b;對表結構的更改操作&#xff0c;比如 alter table、drop table 等…

Android APK包反編譯為java文件教程

方法 流程&#xff1a; test.apk -> smali文件 -> dex文件 -> jar文件 ->java 文件 將APK包解壓為 smail文件 下載 apktool工具 apktool.jar 將 test.apk 和 apktool.jar放同一目錄下&#xff0c;并執行以下命令 java -jar apktool.jar d -f xxx.apk -o xxx(解…

【如何像網吧一樣弄個游戲菜單在家里】

GGmenu 個人家庭版游戲、應用管理 桌面圖標管理器

[環境配置]ssh連接報錯“kex_exchange_identification: read: Connection reset by peer”

已經被VScode ssh毒死好幾次了&#xff0c;都是執行命令意外中斷&#xff0c;然后又VSCode里連不上、本機Terminal也連不上了。。。 重啟遠程服務器&#xff0c;VSCode可以連上了&#xff0c; 系統ssh還是不行&#xff0c;報錯“kex_exchange_identification: read: Connecti…

容器(JAVA基礎)

一.泛型 在Java中,泛型(Generics)是JDK 5.0引入的一個新特性,它允許在定義類、接口和方法時使用類型參數(type parameters)。類型參數在使用前必須先被實際類型(如Integer、String等)替代,這個過程稱作類型實例化或類型擦除。泛型提供了編譯時類型安全,減少了運行時…

CSS~~

CSS是一門語言&#xff0c;用于控制網頁表現 CSS(Cascading Style Sheet):層疊樣式表 W3C標準:網頁主要由三部分組成 結構:HTML 表現: CSS 行為:JavaScript 1&#xff0c;CSS的導入方式 &#xff08;1&#xff09;內聯樣式 在標簽內部使用style屬性&#xff0c;屬性值是cs…

類 Unix 系統的文件目錄結構

以下是類 Unix 系統的文件目錄結構、各個目錄主要存放的文件以及縮寫的全稱的詳細說明&#xff1a; 根目錄 /&#xff1a; 全稱: Root Directory說明&#xff1a;根目錄是整個文件系統的起點&#xff0c;包含了所有其他目錄和文件。 /bin 目錄&#xff1a; 全稱: Binary說明&a…

Nginx最常用的指令

服務管理 sudo systemctl status nginx # nginx當前狀態 sudo systemctl reload nginx # 重新加載 nginx sudo systemctl restart nginx # 重啟nginxsudo nginx -t # 檢查語法 nginx # 啟動 nginx -s reload # 重啟 nginx -s stop # 關閉進程 nginx -s quit #…