Cod sursa(job #2974295)

Utilizator stefan05Vasilache Stefan stefan05 Data 3 februarie 2023 20:10:28
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <vector>
#include <map>

#define NMAX 1005
#define INF 1e9

using namespace std;

ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

int n, m;
int x, y, z;
vector<int> l[NMAX];
map<pair<int, int>, int> cap;
bool f[NMAX];
int ans;
int i, j;

int dfs(int, int);

int main()
{
    fin >>n>>m;
    for (i = 1; i <= m; ++i)
    {
        fin >>x>>y>>z;
        l[x].push_back(y); cap[{x, y}] = z;
        if (!cap[{y, x}]) l[y].push_back(x);
    }

    x = 1;
    while (x)
    {
        for (i = 1; i <= n; ++i) f[i] = 0;
        x = dfs(1, INF);
        ans += x;
    }

    fout <<ans<<'\n';
    fout.close();
    return 0;
}

int dfs(int vf, int minim)
{
    f[vf] = 1;
    if (vf == n) return minim;

    for (int vfnou: l[vf])
        if (!f[vfnou] && cap[{vf, vfnou}])
        {
            x = dfs(vfnou, min(minim, cap[{vf, vfnou}]));
            if (x)
            {
                cap[{vf, vfnou}] -= x;
                cap[{vfnou, vf}] += x;
                return x;
            }
        }

    return 0;
}