手抄网络流dinic核心代码
bool bfs() { memset(dis,-1,sizeof(dis)); dis[1]=0; queue<int>q; q.push(1); while (!q.empty()){ int r=q.front();q.pop(); for (int i=head[r];i!=-1;i=edge[i].nxt){ int j=edge[i].e; if (dis[j]==-1&&edge[i].v){ dis[j]=dis[r]+1; q.push(j); } } } return dis[n]!=-1; } int dfs(int u,int flow) { if (u==n)return flow; int delta=flow; for (int i=head[i];i!=-1;i=edge[i].nxt){ int v=edge[i].e; if (dis[v]==dis[u]+1&&edge[i].v>0){ int d=dfs(v,min(delta,edge[i].v)); edge[i].v-=d;edge[i^1].v+=d; delta-=d; if (delta==0)break; } } return flow-delta; } int dini() { int ans=0; while (bfs()){ ans+=dfs(1,INF); } return ans; }