Cod sursa(job #2767917)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 8 august 2021 15:52:03
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>

const int NMAX = 1e3;

int s, d;

std::vector<int> graph[1 + NMAX];

int cap[1 + NMAX][1 + NMAX];

bool vis[1 + NMAX];
int t[1 + NMAX];

bool dfs(int node) {
  if (node == d)
    return true;

  vis[node] = true;

  for (auto& nb : graph[node]) {
    if (!vis[nb] && cap[node][nb] > 0) {
      t[nb] = node;

      if (dfs(nb))
        return true;
    }
  }

  return false;
}

int main() {
  std::ifstream in("maxflow.in");
  std::ofstream out("maxflow.out");

  int n, m;
  in >> n >> m;

  for (int i = 1; i <= m; ++i) {
    int x, y, c;
    in >> x >> y >> c;

    graph[x].push_back(y);
    graph[y].push_back(x);

    cap[x][y] += c;
  }

  s = 1;
  d = n;

  int maxFlow = 0;

  while (dfs(s)) {
    int min = 1e9;

    for (int current = d; current != s; current = t[current])
      min = std::min(min, cap[t[current]][current]);

    for (int current = d; current != s; current = t[current]) {
      cap[t[current]][current] -= min;
      cap[current][t[current]] += min;
    }

    maxFlow += min;

    memset(vis, 0, sizeof(vis));
  }

  out << maxFlow << '\n';

  return 0;
}