負載平衡問題(網路流)

2021-07-15 20:17:18 字數 1051 閱讀 8070

建圖最大流即可,注意可以在連續運輸多次,剛開始直接從xi連向相鄰的yi了,這樣只是運輸一次,沒有考慮到運輸多次的情況

拆點,分xiyi,對應每個倉庫。 

從源點向xi連邊,容量為ri,費用為0; 

從yi向匯點連邊,容量為xba,費用為0; 

從xi向對應的yi連邊,容量為inf,費用為0; 

從yi向環形相鄰的xi連邊,容量為inf,費用為1; //!!!!

由於貨物在倉庫之間可以被運輸多次,連xi到yi這樣的建圖方法是不科學的。

#include#include#include#include#includeusing namespace std;

const int n=2009;

const int inf=0x3f3f3f3f;

int n,a[n],s,t;

int head[n],tot=0,now[n],pre[n],dis[n];

bool b[n];

struct aa

edge[200000];

void addedge(int x,int y,int z,int w)

bool spfa()

} b[u]=false;

} if (dis[t]==inf) return false;

return true;

}int work()

return ans;

}int main()

{ scanf("%d",&n);

int total=0;

for (int i=1;i<=n;i++) scanf("%d",&a[i]),total+=a[i];

total=total/n;

s=0,t=n*2+1;

for (int i=1;i<=n;i++) addedge(s,i,a[i],0);

for (int i=n+1;i<=n*2;i++) addedge(i,t,total,0);

for (int i=1;i<=n;i++) addedge(i,i+n,inf,0);

for (int i=1;i

網路流24題 負載平衡問題

題目描述 g 公司有n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。對於給定的n 個環形排列的倉庫的庫存量,程式設計計算使n 個倉庫的庫存數量相同的最少 搬運量。這題我貌似做過的樣子 不過當時的做法是...

網路流24題 負載平衡問題

怎麼每天都要被sb錯誤坑半天.建圖的時候竟然忘記了反向邊 這道題我們可以考慮把乙個地方拆成兩個點x1 y1 x1,y1 從源點向x1 x 1連流量為物品數,費用0的邊,y1 y 1向匯點連所有物品平均數的邊,然後每個x1 x 1向對應y1 y 1連流量in f inf 費用 0 0 的邊,然後對於物...

網路流24題 負載平衡問題

鏈結 題意 使n個倉庫的庫存量達到平衡所需最小代價,其中移動只能發生在相鄰倉庫 1,n也看做相鄰 做法 最小費用最大流 環分紙牌貪心 先求出平均值,比它大的倉庫提供貨物,與源點相連,容量為 庫存量 平均值 對於比它小的倉庫,需要接受貨物,所以與匯點相連。另外,對於相鄰的倉庫,互相連一條 運輸道路 費...