int dinic(int nodes, int source, int sink) { int flow, max_flow = 0; while (dinic_bfs(nodes, source, sink)) { std::fill(ptr, ptr + nodes, 0); while ((flow = dinic_dfs(source, INF, sink)) != 0) { max_flow += flow; } } return max_flow; }
flow[i^1]-=tmp; return tmp; } } return 0; } int dinic_flow() { for (int i=0; i<nedge; ++i) flow[i] = 0; int result=0; while (dinic_bfs()) { for (int i=0;i<node;i++) work[i]=head[i]; while (1) { int delta=dinic_dfs(src,oo); if (delta==0) break; result+=delta; } } return result; }