Cod sursa(job #299008)

Utilizator hasegandaniHasegan Daniel hasegandani Data 6 aprilie 2009 15:27:37
Problema Flux maxim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<stdio.h>
#include<string.h>

#define Nmax 1050
#define inf 0x3f3f

int n,N,m,ma[Nmax][Nmax],v[Nmax],viz[Nmax],in,sf,a,b,c;

int DF(int nod)
{
    if (v[nod]==sf)
        {
        N=nod;
        return 1;
        }
    for(int i=1;i<=n;++i)
        if (ma[v[nod]][i] && !viz[i])
            {
                v[nod+1]=i;
                viz[i]++;
                a=DF(nod+1);
                viz[i]--;
                if (a)
                    return 1;
            }
    return 0;
}

void Fulkerson()
{
    v[1]=in;
    viz[in]=1;
    while(DF(1))
    {
	int min=inf,i;
	for(i=2;i<=N;++i)
            if (min>ma[ v[i-1] ][ v[i] ])
                min=ma[ v[i-1] ][ v[i] ];
        for(i=2;i<=N;++i)
            {
            ma[v[i-1]][v[i]]-=min;
            ma[v[i]][v[i-1]]+=min;
            }
	   /*for(i=1;i<=N;++i)
            printf("%d ",v[i]);
        printf("\n");
        memset(viz,0,Nmax);*/
    }
}

int main()
{
    int i;
    freopen("maxflow.in","r",stdin);
    freopen("maxflow.out","w",stdout);
    scanf("%d%d",&n,&m);
    in=1; sf=n;
    for(i=1;i<=m;++i)
        {
        scanf("%d%d%d",&a,&b,&c);

        ma[a][b]=c;
        }
    Fulkerson();
    int sol=0;
    for(i=1;i<=n;++i)
        sol+=ma[i][in];
    printf("%d\n",sol);
    return 0;
}