網路流24題 負載平衡(費用流)

2021-08-14 08:14:47 字數 1140 閱讀 3809

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 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。資料保證一定有解。這道題與運輸問題有一些相似點。可以將這些倉庫分成兩類,一類是比最終數量多的倉庫,另一類是比最終數量少的倉庫。最終數量為...