題目描述
要求最後所有倉庫的庫存相同,那麼就可以想到求出這個值,也就是倉庫庫存量的平均值delta。
如果某乙個倉庫的庫存量x大於這個平均值,那麼就從源點向這個店連一條流量為x-delta的邊,表示這個倉庫可以向外搬運的貨物數量,費用為0。
反之,如果某乙個倉庫的存貨量小於x這個平均值,就從這個店向匯點連一條流量為delta-x的邊,表示這個倉庫需要運來的貨物數量,費用為0。
再把相鄰的倉庫互相連邊,流量為inf(如果這個倉庫有多餘的貨物,就可以一直往外搬),單位費用為1。
最後跑費用流就可以了。
#include#include#include
#include
using
namespace
std;
const
int inf=0x3f3f3f3f
;const
int n=201,m=1001
;struct
nodee[m
<<1
];int n,s,t,enum=1
;long
long
num;
intfront[n],dis[n],path[n],a[n],incf[n];
bool
vis[n];
queue
q;intqread()
returnx;}
void insert(int u,int v,int f,int
w)bool
spfa()}}
}return dis[t]}int
costflow()
res+=dis[t]*incf[t];
}return
res;
}int
main()
num/=n;
for(int i=1;i<=n;i++)
if(a[i]-num>0)insert(s,i,a[i]-num,0
);
else
if(a[i]-num<0)insert(i,t,num-a[i],0
); insert(
1,2,inf,1);insert(1,n,inf,1
); insert(n,n-1,inf,1);insert(n,1,inf,1
);
for(int i=2;i)
printf(
"%d\n
",costflow());
return0;
}
網路流24題 負載平衡(費用流)
cogs 很簡單的題面呀 源點向每個點連邊,容量為貨物量,費用為0 因為最後要每個倉庫的貨物都相同 所以從每個倉庫向匯點連邊,費用為0,容量為平均數 因為可以丟到相鄰的倉庫 所以向相鄰的倉庫連邊,費用為1,容量為inf 然後就是費用流 include include include include ...
負載平衡問題(費用流,網路流24題)
有 n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量 a i 不等。如何用最少搬運量可以使 n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。資料保證一定有解。這道題與運輸問題有一些相似點。可以將這些倉庫分成兩類,一類是比最終數量多的倉庫,另一類是比最終數量少的倉庫。最終數量為...
網路流24題 負載平衡問題
題目描述 g 公司有n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。對於給定的n 個環形排列的倉庫的庫存量,程式設計計算使n 個倉庫的庫存數量相同的最少 搬運量。這題我貌似做過的樣子 不過當時的做法是...