Cod sursa(job #2971074)

Utilizator and_Turcu Andrei and_ Data 26 ianuarie 2023 15:40:57
Problema Flux maxim Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#define N 1007
using namespace std;

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

int n,m;
    ///     val nod
int a[N][N];
int rev[N][N];
int ans;

void Citire()
{
    fin >> n >> m;
    for(int i=1;i<=m;i++)
    {
        int x,y,val;
        fin >> x >> y >> val;
        a[x][y]=val;
    }
    fin.close();
}

int mi;

int DFS(int x)
{
    if( x==n )
        return mi;
    for(int y=1;y<=n;y++)
        if( a[x][y] )
        {
            int aux=mi;
            mi=min(mi,a[x][y]);
            int r=DFS(y);
            if( r!=-1 )
            {
                a[x][y]-=r;
                return r;
            }
            mi=aux;
        }
    for(int y=1;y<=n;y++)
        if( rev[x][y] )
        {
            int aux=mi;
            mi=min(mi,rev[x][y]);
            int r=DFS(y);
            if( r!=-1 )
            {
                rev[x][y]-=r;
                return r;
            }
            mi=aux;
        }
    return -1;
}

void Ford_Fulkerson()
{
    int x=0;
    while( x!=-1 )
    {
        mi= 110007;
        x=DFS(1);
        if( x!=-1 )
            ans+=x;
    }
}

int main()
{
    Citire();
    Ford_Fulkerson();
    fout << ans << "\n";
    fout.close();
    return 0;
}