Cod sursa(job #2162785)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 12 martie 2018 13:56:31
Problema Flux maxim Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#define nmax 1002
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

int flux=0;
int a[nmax][nmax],cost[nmax][nmax],n,m,x,y,val,sol[nmax*10],viz[nmax][nmax],opt;

void dfs(int nod,int lev)
{
    sol[lev]=nod;
    for(int i=1;i<=n;i++)
    {
        if(a[nod][i]&&!viz[nod][i])
        {
            if(i==n)
            {
                int mini=100000002;
                x=lev+1;
                sol[x]=n;
                for(int j=1;j<x;j++)
                {
                    mini=min(mini,cost[sol[j]][sol[j+1]]);
                }
                if(mini){
                flux+=mini;
                for(int j=1;j<x;j++)
                {
                    cost[sol[j]][sol[j+1]]-=mini;
                    if(!cost[sol[j]][sol[j+1]])
                        a[sol[j]][sol[j+1]]=0;
                }
                }
                return;
            }
            viz[nod][i]=1;
            dfs(i,lev+1);
            viz[nod][i]=0;
        }
    }
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>val;
        a[x][y]=1;
        cost[x][y]=val;
        if(x==y)
            a[x][y]=0;
    }
    dfs(1,1);
    fout<<flux;
    return 0;
}