算法模板
Dinic/ISAP求最小割
由最大流最小割定理得:最大流 = = =最小割
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=10000+10;
const int M=200000+10;
const int INF=1e9;
int n,m,S,T;
int h[N],ve[M],c[M],ne[M],id;
int d[N],q[N],cur[N];
void add(int x,int y,int z){
ve[id]=y;c[id]=z;ne[id]=h[x];h[x]=id++;
ve[id]=x;c[id]=0;ne[id]=h[y];h[y]=id++;
}
bool bfs(){
int he=0,ta=0;
memset(d,-1,sizeof d);
q[0]=S;d[S]=0;cur[S]=h[S];
while(he<=ta){
int x=q[he++];
for(int i=h[x];~i;i=ne[i]){
int y=ve[i];
if(d[y]==-1&&c[i]){
d[y]=d[x]+1;
cur[y]=h[y];
if(y==T)return true;
q[++ta]=y;
}
}
}
return false;
}
int dfs(int u,int limit){
if(u=