建圖最大流即可,注意可以在連續運輸多次,剛開始直接從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也看做相鄰 做法 最小費用最大流 環分紙牌貪心 先求出平均值,比它大的倉庫提供貨物,與源點相連,容量為 庫存量 平均值 對於比它小的倉庫,需要接受貨物,所以與匯點相連。另外,對於相鄰的倉庫,互相連一條 運輸道路 費...