網路流24題 負載平衡問題

2022-03-17 01:57:54 字數 948 閱讀 5774

鏈結

題意:使n個倉庫的庫存量達到平衡所需最小代價,其中移動只能發生在相鄰倉庫(1,n也看做相鄰)

做法:最小費用最大流(環分紙牌貪心)

先求出平均值,比它大的倉庫提供貨物,與源點相連,容量為(庫存量-平均值);對於比它小的倉庫,需要接受貨物,所以與匯點相連。另外,對於相鄰的倉庫,互相連一條「運輸道路」,費用為1,容量無限。跑一遍mcmf即可

code:

#include#define n 1005

#define inf 2000000000

using namespace std;

int n,sum,s,t;

int maxflow,mincost;

int dis[n],flow[n],pre[n],preedge[n];

bool exist[n];

int a[n];

struct edge

edge[n<<4];int head[n],cnt=1;

void add_edge(int from,int to,int flow,int dis)

void add(int from,int to,int flow,int dis)

template void read(t &x)

bool spfa(int s,int t)}}

}return pre[t]!=-1;

}void mcmf()//最小費用最大流

}}int main()

sum/=n; //平均值

for(int i=1;i<=n;++i)

for(int i=2;i<=n;++i)//向兩邊連邊

add(1,n,inf,1);//環形相連

add(n,1,inf,1);

mcmf();

cout

}

網路流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整除,所以我們一開始就知道每個點是要流出的還是流入的,那麼我們就可以根據這一點對每個點進行分類,將其分成要一定要流出的和要一定流入的,分別與源和匯相對應,即如果他要流出,那麼源點連向它,流量為其多出來的值,費用為0,流入點與匯點同理。同時,每個點還要與其相鄰的...