Cod sursa(job #882866)

Utilizator cremarencodianaCremarenco Diana cremarencodiana Data 19 februarie 2013 15:34:02
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <stdio.h>
# include <string.h>
# include <algorithm>
using namespace std;

int n,m,c[1010][1010],f[1010][1010],r,t[1010],i,x,y,fl;
int BFS()
{
    int p,u,nod,i,q[1000];
    memset(t,0,sizeof(t));
    p=u=1;
    t[1]=-1;
    q[1]=1;
    while (p<=u)
    {
        nod=q[p];
        for (i=1; i<=n; i++)
            if (t[i]==0 && c[nod][i]>f[nod][i])
            {
                t[i]=nod;
                q[++u]=i;
                if (i==n) return 1;
            }
        p++;
    }
    return 0;
}

void flux()
{
    int i; int r;
    while (BFS())
    {
        r=100000;
        i=n;
        while (i!=1)
        {
            r=min(r,c[t[i]][i]-f[t[i]][i]);
            i=t[i];
        }
        i=n;
        while (i!=1)
        {
            f[t[i]][i]+=r;
            f[i][t[i]]-=r;
            i=t[i];
        }
        fl+=r;
    }

}

int main()
{
    freopen("maxflow.in","r",stdin);
    freopen("maxflow.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for (i=1; i<=m; i++)
    {
        scanf("%d %d %d\n",&x,&y,&r);
        c[x][y]=r;
    }
    fl=0;
    flux();
    printf("%d\n",fl);
    return 0;
}