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;
}
Ejemplo n.º 2
0
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; }