Cod sursa(job #2972181)

Utilizator and_Turcu Andrei and_ Data 28 ianuarie 2023 19:44:11
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 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;
bool vizitat[N];

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)
{
    vizitat[x]=1;
    if( x==n )
        return mi;
    for(int y=1;y<=n;y++)
        if( a[x][y] and !vizitat[y] )
        {
            int aux=mi;
            mi=min(mi,a[x][y]);
            int r=DFS(y);
            if( r!=-1 )
            {
                a[x][y]-=r;
                a[y][x]+=r;
                return r;
            }
            mi=aux;
        }
    for(int y=1;y<=n;y++)
        if( a[y][x] and !vizitat[y] )
        {
            int aux=mi;
            mi=min(mi,a[y][x]);
            int r=DFS(y);
            if( r!=-1 )
            {
                a[y][x]-=r;
                a[x][y]-=r;

                return r;
            }
            mi=aux;
        }
    return -1;
}

void Ford_Fulkerson()
{
    int x=0;
    while( x!=-1 )
    {
        for(int i=1;i<=n;i++)
            vizitat[i]=0;
        mi= 110007;
        x=DFS(1);
        if( x!=-1 )
            ans+=x;
    }
}

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