一、定义与定理
最小费用最大流:设G是以s为源t为汇的网络,c是G的容量,b是G的单位流量费用,且有b[i][j] = -b[i][j],f是G的流,则b(f)=∑(fij*bij),(i, j)∈E(G) 且fij>0。最小费用最大流问题,就是求网络G的最大流f且使费用b(f)最小。这样的流称为最小费用最大流。
二、算法思想
用Ford-Fulkerson算法的思想,不断地在残留网络中寻找增广路,只不过这个增广路是当前网络中s到t的以单位流量费用为权的最短路,对这条增广路进行操作。由于费用有负值,建议用SPFA算法。
三、算法介绍
描述:
1mcmf()
2{
3 while(true)
4 {
5 for(int i=1; i<=n+m+1; i++)
6 d[i] = MAX;
7 d[s] = 0;
8 spfa(); //p中存有该点的前继点
9 if(p[t] == -1) //表示已无增广路
10 break;
11 int minf = INT_MAX;
12 int it = t;
13 while(p[it] != -1)
14 {
15 minf = min(minf, c[p[it]][it] - f[p[it]][it]);
16 it = p[it];
17 }
18 it = t;
19 while(p[it] != -1)
20 {
21 f[p[it]][it] += minf;
22 f[it][p[it]] = -f[p[it]][it];
23 it = p[it];
24 }
25 }
26}
三、算法示例
POJ 2516 解题报告
转载于:https://www.cnblogs.com/ACAC/archive/2010/05/21/1741175.html
标签:费用,最大,增广,最小,minf,算法,21 来源: https://blog.csdn.net/weixin_30387799/article/details/99238774
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。