Cod sursa(job #2156038)

Utilizator Victor24Vasiesiu Victor Victor24 Data 8 martie 2018 13:43:03
Problema Flux maxim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;

ifstream f ("maxflow.in");
ofstream g ("maxflow.out");

int n, m, inflow[1005][1005], i, j, a, b, c, mi, flux, pa[1005];

int fv[1005];

int bfs()
{

    memset( fv, 0 , sizeof(fv) );

    queue < int > q;

    q.push( 1 );

    fv[1] = 1;
    pa[n] = -1;


    while ( !q.empty() )
    {
        int aux = q.front();
        q.pop();

        for ( int i = 1 ; i <= n ; i++ )
        {
            if ( (fv[ i ] == 0) && (inflow[aux][ i ] > 0) )
            {
                q.push( i );
                pa[ i ] = aux;
                fv[ i ] = 1;
            }
        }

    }

    return fv[n];

}

int main()
{
    f>>n>>m;

    for ( i = 1; i <= m ; i++ )
    {
        f>>a>>b>>c;
        inflow[a][b] += c;
    }

    while ( bfs() )
    {
        int mi = INT_MAX;
        int nod;
        for (nod=n; nod!=1; nod=pa[nod])
        {
            mi = min(mi, inflow[ pa[nod] ][nod]);
        }

        for (nod=n; nod!=1; nod=pa[nod])
        {
            inflow[ pa[nod] ][nod] -= mi;
            inflow[nod][ pa[nod] ] += mi;
        }

        flux += mi;
    }

    g<<flux;

}