Cod sursa(job #298964)

Utilizator hasegandaniHasegan Daniel hasegandani Data 6 aprilie 2009 15:09:25
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<stdio.h>
#include<string.h>

#define Nmax 1001
#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);
            if (a)
                return 1;
            viz[i]--;
            }
    return 0;
}

void Fulkerson()
{
    v[1]=in;
    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");
        
    }
}

int main()
{
    int i;
    freopen("maxflow.in","r",stdin);
    freopen("maxflow.out","w",stdout);
    scanf("%d%d%d%d",&n,&m,&in,&sf);
    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;
}