Cod sursa(job #2344876)

Utilizator RaduToporanRadu Toporan RaduToporan Data 15 februarie 2019 18:26:29
Problema Flux maxim Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <vector>

using namespace std;
int n,m,i,x,y,z,F,t[1005],c[1005][1005];
bool final,viz[1005];

vector <int> v[1005];

void initializare()
{
    int i;
    for (i=1; i<=n; i++)
        viz[i]=0;
}

void dfs(int nod, int flux)
{
    int i;
    viz[nod]=1;
    if (nod!=n)
    {
        for (i=0; i<v[nod].size(); i++)
            if (viz[v[nod][i]]==0 && c[nod][v[nod][i]]!=0)
        {
            dfs(v[nod][i],min(flux,c[nod][v[nod][i]]));
            t[v[nod][i]]=nod;
        }
    }
    else
    {
        i=n;
        while (t[i]!=0)
        {
            c[t[i]][i]=c[t[i]][i]-flux;
            c[i][t[i]]=c[i][t[i]]+flux;
            i=t[i];
        }
        final=true;
    }
}

int main()
{
    freopen("maxflow.in","r",stdin);
    freopen("maxflow.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1; i<=m; i++)
    {
        scanf("%d%d%d",&x,&y,&z);
        v[x].push_back(y);
        c[x][y]=z;
    }
    t[1]=0;
    final=true;
    while (final==true)
    {
        final=false;
        dfs(1,2000000000);
        initializare();
    }
    for (i=1; i<=n-1; i++)
        F=F+c[n][i];
    printf("%d\n",F);
    return 0;
}