Cod sursa(job #2591736)

Utilizator andreisontea01Andrei Sontea andreisontea01 Data 31 martie 2020 10:00:27
Problema Flux maxim Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1005;

bool viz[MAXN];
queue<int> coada;
int retea[MAXN][MAXN], sursa[MAXN];

int main()
{
    ifstream fin("maxflow.in");
    ofstream fout("maxflow.out");
    int n, m;
    fin >> n >> m;
    for(int i = 1; i <= m; ++i){
        int x, y, c;
        fin >> x >> y >> c;
        retea[x][y] = c;
    }
    bool sink = 1;
    long long maxflux = 0;
    while(sink){
        sink = 0;
        memset(sursa, 0, n + 1);
        memset(viz, 0, n + 1);
        coada.push(1);
        viz[1] = 1;
        while(!coada.empty()){
            int vf = coada.front();
            coada.pop();
            for(int i = 1; i <= n; ++i){
                if(i != vf && !viz[i] && retea[vf][i] > 0){
                    viz[i] = 1;
                    if(i == n) sink = 1;
                    sursa[i] = vf;
                    coada.push(i);
                }
            }
        }
        int mnflux = 1e9, crt = n;
        while(sursa[crt]){
            mnflux = min(mnflux, retea[sursa[crt]][crt]);
            crt = sursa[crt];
        }
        crt = n;
        while(sursa[crt]){
            retea[sursa[crt]][crt] -= mnflux;
            retea[crt][sursa[crt]] += mnflux;
            crt = sursa[crt];
        }
        maxflux += mnflux;
    }
    fout << maxflux;
    return 0;
}