模板:网络流
最大流Dinic算法:
bool bfs(int s){
queue<int>q;
memset(dep,0,sizeof(dep));
dep[s]=1;
q.push(s);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=pre[x];i;i=nxt[i]){
int y=to[i];
if(w[i]&&!dep[y]){
q.push(y);
dep[y]=dep[x]+1;
if(y==t) return 1;
}
}
}
return 0;
}
int Dinic(int x,int flow){
if(x==t) return flow;
int rest=flow,k;
for(int i=pre[x];i&&rest;i=nxt[i]){
int y=to[i];
if(w[i]&&dep[y]==dep[x]+1){
k=Dinic(y,min(rest,w[i]));
if(!k) dep[y]=0;
w[i]-=k;
w[i^1]+=k;
rest-=k;
}
}
return flow-rest;
}
int maxflow(){
int flow=0,max_flow=0;
while(bfs(s)){
while(flow=Dinic(s,inf))
max_flow+=flow;
}
return max_flow;
}
未填。。坑

浙公网安备 33010602011771号