最大流Sap模板
int dfs(int u,int augu){
int augv=0,v,delta,mind= n-1;
if(u==T)
return augu;
for(v=S;v<=T;v++)
if(cap[u][v]>0){
if(dist[u]==dist[v]+1){
delta=min(augu-augv,cap[u][v]);
delta=dfs(v,delta);
cap[u][v]-=delta;
cap[v][u]+=delta;
augv+=delta;
if(augv==augu)
return augv;
if(dist[S]>=n)
return augv;
}
mind=min(mind,dist[v]);
}
if(!augv){
vd[dist[u]]--;
if(!vd[dist[u]])
dist[S]=n;
dist[u]=mind+1;
vd[dist[u]]++;
}
return augv;
}
void sap(){
n=T+1;
vd[0]=n;
while(dist[S]<n)
flow+=dfs(S,INF);
}