洛谷P4016 負載平衡問題(費用流)

2022-04-14 02:11:29 字數 1018 閱讀 1219

這題是網路流24題中的一道相對簡單的題。既然是網路流題,我們先考慮怎麼建圖。

讀入各倉庫貨物數\(a[i]\)求出平均值\(\frac\),我們就知道每乙個倉庫需要調入/調出多少貨物,令\(f(i)=a[i]-\frac\)。

新建乙個源點s和乙個匯點t,對於任意的\(i\),若\(f(i)>0\),說明該倉庫要向其他倉庫調出貨物,我們加入一條從s到\(i\)的邊,邊權為0,容量為\(f(i)\)。可以看成本來沒有東西,源點s通過這條邊給了它\(f(i)\)個。它必須要把這\(f(i)\)個流走。

同理,若\(f(i)<0\),說明該倉庫要從其他倉庫調入貨物,我們加入一條從\(i\)到t的邊,邊權為0,容量為\(-f(i)\)。可以看成本來是負的,只有滿足了這條邊,才說明有其他倉庫流向它將其補為0。

至於環內的邊,沒有限制,隨便流,一定是滿足負載平衡的。將每乙個點與其相鄰點連邊,邊權為1,容量為無窮。

可以幫助理解:

跑一遍最小費用最大流就ok了。只是示例,寫**的時候不要忘記處理反向邊。

#include#include#include#include#include#define inf 0x3f3f3f3f

using namespace std;

int n,fst[110],nxt[1000],cnt=0,a[101],book[110],dis[110],pre[110];

struct edge e[1000];

void add(int x,int y,int z,int k)

int spfa()}}

book[p]=0;

q.pop();

}if(dis[n+1]0)

}for(i=1;i<=n;i++)

printf("%d",dinic());

system("pause");

return 0;

}

洛谷P4016 負載平衡問題

問題描述 有乙個由n個沿環形鐵路分布的倉庫,每個倉庫有一定的貨物,某乙個倉庫可以往兩邊的倉庫運送貨物,求使n個倉庫貨物相等時的最小運輸量。怎麼做?這道題有很多做法,有貪心的,有二分的,有網路流的,其他的演算法相信同學們可以在其他的題解上看到,所以在這裡主要講一下網路流的做法。其實這是一道最小費用最大...

洛谷 P4016 負載平衡問題

題目描述 g 公司有 n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入輸出格式 輸入格式 檔案的第 1 行中有 1 個正整數 n,表示有 n 個倉庫。第 22 行中有 n 個正整數,表示 n 個...

洛谷 P4016 負載平衡問題

第一眼看見覺得和均分紙牌差不多,然而因為這是環形的,並不能用均分紙牌的方法做,但是均分紙牌的思想仍然適用 首先我們假設平均數為sum1。那麼對於第1個人,我們假設他給第n個人k個糖果,第2個人給1 第3個人給2 第n個人給第n 1個人 那麼對於第1個人給完n,第2個人給完1,第乙個人不會再改變糖果數...