前言
FF算法在某些特例下比较慢,相比于EK算法比较容易实现,不用再去记录前驱路径已经每个点的递归下去的最大流。因为前驱节点回溯回来就可以更新,而后驱子系统的最大流可以通过dfs的值传回来,于是只有记录每个点有没有被搜过就行了。
实现
#include <bits/stdc++.h>
using namespace std;
/**
* 最大流增广路FF算法
*/
namespace FF {
const int inf = 0x3f3f3f3f; //给一个最大的水流量
const int maxnn = (int)1e4+5;
struct Edge {
int from, to, cap, flow; //边的起点 边的终点 边的容量 边的流量
Edge(int a, int b, int c, int d):from(a), to(b), cap(c), flow(d) {
}
};
int n, m; //图的点个数 正向边个数
vector<Edge> edge; //注:如果用数组要开2倍的空间 因为有反向边
vector<int> G[maxnn]; //每个起点对应