運輸問題(最小費用流)

2021-07-13 08:02:22 字數 1887 閱讀 8977

想看更多圖論題目?:

description

w公司有m個倉庫和n 個零售商店。第i 個倉庫有ai 個單位的貨物;第j 個零售商店需要bj個單位的貨物。貨物供需平衡,即

。從第i 個倉庫運送每單位貨物到第j 個零售商店的費用為cij 。試設計乙個將倉庫中所有貨物運送到零售商店的運輸方案,使總運輸費用最少。

對於給定的m 個倉庫和n 個零售商店間運送貨物的費用,計算最優運輸方案和最差運輸方案。

input

多組資料輸入.

每組輸入第1行有2 個正整數m和n,分別表示倉庫數和零售商店數。接下來的一行中有m個正整數ai ,1≤i≤m,表示第i個倉庫有ai 個單位的貨物。再接下來的一行中有n個正整數bj ,1≤j≤n,表示第j個零售商店需要bj 個單位的貨物。接下來的m行,每行有n個整數,表示從第i 個倉庫運送每單位貨物到第j個零售商店的費用cij 。

output

每組輸出最少運輸費用和最多運輸費用

sample input

2 3220 280

170 120 210

77 39 105

150 186 122

sample output

48500

69140

題目出自nefu492

思路:首先求最小費用,就是乙個裸的最小費用最大流問題了,建立源點匯點,源點連線n個點,m個點連線匯點,然後n個點與m個點之間相互連邊,跑乙個最小費用流就ok。

然後相對麻煩點兒的是最大費用,其實也不麻煩,只是建圖的時候稍微變一下就ok了,將n個點與m個點之間連邊的時候將其費用化成相反數,然後跑一遍最小費用流,結果取反就是anser~

#include #include #include #include#include#include#include#includeusing namespace std;

typedef long long ll;

const int oo=1e9;

const int mm=11111111;

const int mn=888888;

int node,src,dest,edge;

int ver[mm],flow[mm],cost[mm],nex[mm];

int head[mn],dis[mn],p[mn],q[mn],vis[mn];

/**這些變數基本與最大流相同,增加了cost 表示邊的費用,p記錄可行流上節點對應的反向邊*/

void prepare(int _node,int _src,int _dest)

return p[dest]>-1;

}int spfaflow()/**源點到匯點的一條最短路即可行流,不斷的找這樣的可行流*/

return ret;

}int a[10005],b[10005],x[10005][10005];

int main()

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

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

for(int j=1; j<=m; j++)

printf("%d\n",spfaflow());

prepare(n+m+2,0,n+m+1);

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

addedge(0,i,a[i],0);

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

addedge(i+n,n+m+1,b[i],0);

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

for(int j=1; j<=m; j++)

addedge(i,j+n,oo,-x[i][j]);

printf("%d\n",-spfaflow());

}return 0;

}

最小費用流

include include define maxn 61 define maxv maxn maxn 2 1 define maxe maxv 5 define oo 2147483647 define min a,b a b b a define maxq maxe using namespa...

最小費用流

int v 頂點數 vector g max v int dist max v 最短距離 int prev max v 最短路中前驅結點對應的點 int pree max v 最短路中前驅結點對應的邊 void addedge int from,int to,int cap,int cost 求從s...

最小費用流

acm模版 最小費用流 o v e f init network g g.build v,e call g.mincost s,t flow g.flow cost g.cost 注意 spfa增廣,實際複雜度遠遠小於o v e define typef int type of flow defin...