時間限制: 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條髒毛巾,所以髒...