Cod sursa(job #2842138)

Utilizator vmnechitaNechita Vlad-Mihai vmnechita Data 31 ianuarie 2022 10:31:12
Problema Flux maxim Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 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, minn, r;
bool gasit, viz[MAX];

void dfs(int nod);

int main()
{
    int m, i, j, 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 = INT_MAX, gasit = 0;
        dfs(1);
        if(gasit == 1) r += minn;
    }

    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 = min(minn, a[nod][i].second - a[nod][i].first);

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

            a[nod][i].first += minn;
            a[i][nod].first -= minn;
        }
}