本文考虑的是自最费用最大流问题。
最大流问题的标号法:
1.对初始点找有裕量的下一跳,用深度优先一路走下去,一直到终点为止,那么取这条路最小的一段的裕量。当然裕量也包括反向可以减少的量。
2.将这个裕量更新到这条路经的每个点上。
3.重复1,一直到找不到再有通往终点的裕量为止。那么此时就是最大流量。
最大流量最小费用问题:
将其分为两个不同的问题:
1.最小费用(加权距离)
2.最大流量(用标号算法)。
一般的思路是可以用D斯特拉算法对最小费用进行求解。再求出最消费用的路线后求解最大流。
1.清空流量,找出最短路径。
2.对该路径求最大流量。
3.更新流量,继续寻找最短路径。
4.找最大流
当然本博客由特给了最简单高效的方法:
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 1e5+10;
struct node {
int to,w,f,nxt;
} e[maxn];
int n,m,s,t,maxflow,mincost;
int dis[maxn],flow[maxn],via[maxn],pre[maxn],last[maxn];
int head[maxn],cnt=0;
void addedge( int u, int v, int f, int w )
{
e[cnt].to = v;
e[cnt