Cod sursa(job #2842213)

Utilizator vmnechitaNechita Vlad-Mihai vmnechita Data 31 ianuarie 2022 12:35:39
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pf push_front
#define MOD 1000000007
#define MAX 1005

using namespace std;

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

pair < int, int > a[MAX][MAX];
int n, r, I, J, minn[MAX];
bool gasit, viz[MAX];

void dfs(int nod);

int main()
{
    int m, i, x, y, z;

    fin >> n >> m;

    for(i = 1; i <= m; i++)
    {
        fin >> x >> y >> z;
        a[x][y].second = z;
    }

    gasit = 1;
    while(gasit == 1)
    {
        for(i = 1; i <= n; i++) viz[i] = 0;
        minn[0] = INT_MAX, gasit = 0, I = J = 0;
        dfs(1);
        if(gasit == 1) r += minn[J];
    }

    fout << r;

    return 0;
}

void dfs(int nod)
{
    int i;

    viz[nod] = 1;
    for(i = 1; gasit == 0 && i <= n; i++)
        if(a[nod][i].second - a[nod][i].first > 0 && viz[i] == 0)
        {
            minn[++I] = min(minn[I-1], a[nod][i].second - a[nod][i].first);

            if(i != n) dfs(i);
            else gasit = 1, J = I;

            if(gasit == 1)
            {
                a[nod][i].first += minn[J];
                a[i][nod].first -= minn[J];
            }
            else I--;
        }
}