Cod sursa(job #2602745)

Utilizator Chirac_MateiChiriac Matei Chirac_Matei Data 17 aprilie 2020 19:01:56
Problema Flux maxim Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
#define f first
#define s second

using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");

int n,m,i,x,y,c,flux;
int viz[1005];
int f[1005][1005];
int maxf[1005][1005];
pair <bool, int> ans;

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

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

    for(int i=1;i<=n;i++)
    {
        if(!viz[i] && maxf[poz][i]>f[poz][i])
        {
            auto ans = dfs(i, min(mini, maxf[poz][i]-f[poz][i]));

            if(ans.f)
            {
                f[poz][i]+=ans.s;
                f[i][poz]-=ans.s;

                return ans;
            }
        }
    }

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

    while(true)
    {
        for(i=1;i<=n;i++)
            viz[i]=false;

        ans = dfs(1, 110005);

        if(!ans.f)
            break;

        flux+=ans.s;
    }

    fout<<flux;
    return 0;
}