Cod sursa(job #1295051)

Utilizator gabib97Gabriel Boroghina gabib97 Data 18 decembrie 2014 18:38:44
Problema Flux maxim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>

using namespace std;
int n,m,i,k,C[1001][1001],F[1001][1001],flow,c[1000000],t[1001],x,y;
bool BFS()
{
    int i,p,u,x;
    p=u=1;
    c[p]=1;
    for (i=1;i<=n;i++) t[i]=0;
    while (p<=u)
    {
        x=c[p++];
        for (i=1;i<=n;i++)
            if (!t[i]&&F[x][i]<C[x][i])
        {
            c[++u]=i;
            t[i]=x;
            if (i==n) return 1;
        }
    }
    return 0;
}
void flux(int s)
{
    int m,i;
    for (flow=0;BFS();flow+=m)
    {
        m=600000000;
        for (i=n;t[i];i=t[i])
            if (C[t[i]][i]-F[t[i]][i]<m) m=C[t[i]][i]-F[t[i]][i];
        for (i=n;t[i];i=t[i])
        {
            F[t[i]][i]+=m;
            //F[i][t[i]]-=m;
        }
    }
}
int main()
{
    freopen ("maxflow.in","r",stdin);
    freopen ("maxflow.out","w",stdout);
    scanf("%i%i",&n,&m);
    for (i=1;i<=m;i++)
    {
        scanf("%i%i%i",&x,&y,&k);
        C[x][y]=k;
    }
    flux(1);
    printf("%i",flow);
    return 0;
}