Cod sursa(job #2602723)

Utilizator Chirac_MateiChiriac Matei Chirac_Matei Data 17 aprilie 2020 18:05:22
Problema Flux maxim Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
#define f first
#define s second

using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");
struct drum
{
    int y, maxflow, flow;
    drum(int y, int maxflow)
    {
        this->y=y;
        this->maxflow=maxflow;
        this->flow=0;
    }
};
struct nodS
{
    vector <drum> vecini;
    bool viz;
};

int n,m,i,x,y,c,flux;
nodS nod[1005];
pair <bool, int> ans;

pair <bool, int> dfs(int poz, int mini)
{
    nod[poz].viz=true;

    if(poz==n)
        return {true, mini};

    for(drum &it : nod[poz].vecini)
    {
        if(!nod[it.y].viz && it.flow<it.maxflow)
        {
            auto ans=dfs(it.y, min(mini, it.maxflow-it.flow));

            if(ans.f)
            {
                it.flow+=ans.s;
                return ans;
            }
        }
    }

    return {false, 0};
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>c;
        nod[x].vecini.push_back(drum(y, c));
    }

    while(true)
    {
        for(i=1;i<=n;i++)
            nod[i].viz=false;
        ans = dfs(1, 110001);

        if(!ans.f)
            break;

        else
            flux+=ans.s;
    }

    fout<<flux;
    return 0;
}