Cod sursa(job #2520276)

Utilizator Rares31100Popa Rares Rares31100 Data 9 ianuarie 2020 11:56:19
Problema Flux maxim Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m;
int vf[5001],urm[5001],last[1001],nr;

int flow[5001];
int lista[1001],lant[1001],vr;
int sum;

void adauga(int nod,int vec,int fl)
{
    vf[++nr]=vec;
    urm[nr]=last[nod];
    last[nod]=nr;

    flow[nr]=fl;
}

bool drum(int nod,int from=0)
{
    bool getOut=false;

    if(nod==n)
        return true;

    for(int k=last[nod];k && !getOut;k=urm[k])
        if(vf[k]!=from && flow[k])
        {
            lista[++vr]=k;
            lant[vr]=vf[k];

            getOut=drum(vf[k],nod);

            if(!getOut)
                vr--;
        }

    return getOut;
}

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

    for(int i,j,fl,k=1;k<=m;k++)
    {
        in>>i>>j>>fl;

        adauga(i,j,fl);
    }

    while(drum(1)==true)
    {
        int minFound=flow[ lista[1] ];

        for(int i=2;i<=vr;i++)
            minFound=min(minFound,flow[ lista[i] ]);

        for(int i=1;i<=vr;i++)
            flow[ lista[i] ]-=minFound;

        sum+=minFound;

        vr=0;
    }

    out<<sum;

    return 0;
}