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

2022-05-01 03:45:09 字數 1281 閱讀 1787

題目描述

要求最後所有倉庫的庫存相同,那麼就可以想到求出這個值,也就是倉庫庫存量的平均值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 個倉庫的庫存數量相同的最少 搬運量。這題我貌似做過的樣子 不過當時的做法是...