cogs
很簡單的題面呀
源點向每個點連邊,容量為貨物量,費用為0
因為最後要每個倉庫的貨物都相同
所以從每個倉庫向匯點連邊,費用為0,容量為平均數
因為可以丟到相鄰的倉庫
所以向相鄰的倉庫連邊,費用為1,容量為inf
然後就是費用流
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define maxl 500000
#define max 5000
#define inf 1000000000
inline
int read()
struct line
e[maxl];
bool vis[max];
int h[max],cnt=2;
inline
void add(int u,int v,int w,int fy)
;h[u]=cnt++;
e[cnt]=(line);h[v]=cnt++;
}int pe[max],pr[max],dis[max];
int s,t,cost,n,m,flow,opt=1;
bool spfa()
}vis[u]=false;
}if(dis[t]>=inf)return
false;
int flow=inf;
for(int i=t;i!=s;i=pr[i])flow=min(flow,e[pe[i]].w);
for(int i=t;i!=s;i=pr[i])e[pe[i]].w-=flow,e[pe[i]^1].w+=flow;
cost+=opt*flow*dis[t];
flow+=flow;
return
true;
}int sum,a[max];
int main()
網路流24題 負載平衡問題(費用流)
題目描述 要求最後所有倉庫的庫存相同,那麼就可以想到求出這個值,也就是倉庫庫存量的平均值delta。如果某乙個倉庫的庫存量x大於這個平均值,那麼就從源點向這個店連一條流量為x delta的邊,表示這個倉庫可以向外搬運的貨物數量,費用為0。反之,如果某乙個倉庫的存貨量小於x這個平均值,就從這個店向匯點...
網路流 24 題 負載平衡
做法 這道題的隱含前提是這個數肯定能被n整除,所以我們一開始就知道每個點是要流出的還是流入的,那麼我們就可以根據這一點對每個點進行分類,將其分成要一定要流出的和要一定流入的,分別與源和匯相對應,即如果他要流出,那麼源點連向它,流量為其多出來的值,費用為0,流入點與匯點同理。同時,每個點還要與其相鄰的...
負載平衡問題(費用流,網路流24題)
有 n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量 a i 不等。如何用最少搬運量可以使 n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。資料保證一定有解。這道題與運輸問題有一些相似點。可以將這些倉庫分成兩類,一類是比最終數量多的倉庫,另一類是比最終數量少的倉庫。最終數量為...