網路流24題 code vs 1914 運輸問題

2021-07-10 13:07:24 字數 1756 閱讀 8122

時間限制: 2 s

空間限制: 256000 kb

題目等級 : 大師 master

題解

檢視執行結果

w 公司有m個倉庫和n 個零售商店。第i 個倉庫有ai 個單位的貨物;第j 個零售商店

需要bj個單位的貨物。貨物供需平衡,即  sum(si)=sum(bj)

。從第i 個倉庫運送每單位貨物到

第j 個零售商店的費用為cij 。試設計乙個將倉庫中所有貨物運送到零售商店的運輸方案,

使總運輸費用最少。

程式設計任務:

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

輸入描述 input description

的第1行有2 個正整數m和n,分別表示倉庫數和

零售商店數。接下來的一行中有m個正整數ai ,1≤i≤m,表示第i個倉庫有ai 個單位的貨

物。再接下來的一行中有n個正整數bj ,1≤j≤n,表示第j個零售商店需要bj 個單位的貨

物。接下來的m行,每行有n個整數,表示從第i 個倉庫運送每單位貨物到第j個零售商店

的費用cij 。

輸出描述 output description

將計算出的最少運輸費用和最多運輸費用輸出

樣例輸入 sample input

2 3220 280

170 120 210

77 39 105

150 186 122

樣例輸出 sample output

48500

69140

題解:最小費用最大流&最大費用最大流

#include#include#include#includeusing namespace std;

int n,m,a[1000],maxn,minn,tot;

int next[20000],point[10000],v[20000],remain[200000],remain1[200000];

int cost[20000],cost1[20000],dis[10000],laste[100000],can[10000];

const int inf=1e9;

void add(int x,int y,int z,int k)

int addflow(int s,int t)

now=t;

while(now!=s)

return ans;

}int addflow1(int s,int t)

now=t;

while(now!=s)

return ans;

}bool spfa(int s,int t)

}can[now]=0;

}if (dis[t]>inf) return false;

minn+=addflow1(s,t)*dis[t];

return true;

}void maxflow(int s,int t)

void minflow(int s,int t)

int main()

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

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

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

maxflow(0,n+m+1);

minflow(0,n+m+1);

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

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

}

網路流 24 題

1 搭配飛行員 題意 n個飛行員,其中有m名飛行員是正駕駛員。飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。思路 裸二分圖匹配 最大流 題 版本一 網路流做法 引入源點s 0以及匯點t n...

網路流24題

學會網路流演算法後,我們要做的就是把問題轉化成網路流問題。求二分圖最大匹配。網路流建模要找到問題的關鍵特點,用連邊,流量 以及費用 把原問題轉化成網路流問題,包括最大流,最小割,費用流。二分圖最大匹配的特點是每個點最多屬於一條匹配邊。這相當於是說,每個點只能流過一次。要求的是最大匹配,可以得出建模為...

網路流24題

經典問題,做了一部分 太水的就不記錄了 最大流是對於一種完整的匹配的處理,一條路乙個貢獻。要求匹配盡可能多。費用流是對於乙個路徑的最值的處理,每條邊自己的費用。再匹配最多前提下,匹配的費用達到最值。難點就是對於條件狀態的設計 網路流24題 餐巾計畫問題 費用流建模 考慮每天一定有ri條髒毛巾,所以髒...