Cod sursa(job #287378)

Utilizator BloodRainBurceanu Gabriel BloodRain Data 24 martie 2009 19:59:38
Problema Flux maxim Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 2.01 kb
#include<stdio.h>    
#define NMAX 1001
int a[NMAX][NMAX],f[NMAX][NMAX];//,viz[NMAX];
struct coada{int nod,tata;}c[10001];
int p,i,j,u,tz,nod,n,m,t,minim,fluxMaxim;
int main(void)
{
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",&t,&p,&u);
    a[t][p]=u;
    }

p=u=1;
c[p].nod=1;
c[p].tata=0;
while(p<=u)
    {
    nod=c[p].nod;
    for(i=1;i<=n;i++)
        {
        if(a[nod][i]!=0)
            {
            if(a[nod][i]>f[nod][i])//||f[i][nod]>0
                {
                u++;
                c[u].nod=i;
                c[u].tata=p;
                //printf("%d ",i);
                if(i==n)
                    {
                    t=u;
                    minim=1200000;
                    while(c[t].tata!=0)
                        {
                        tz=a[c[c[t].tata].nod][c[t].nod]-f[c[c[t].tata].nod][c[t].nod];
                        if(minim>tz)
                            {
                            minim=tz;
                            }     
                        t=c[t].tata;
                        }
                    fluxMaxim+=minim;
                    //printf("%d",minim);
                    t=u;
                    while(c[t].tata!=0)
                        {
                        f[c[c[t].tata].nod][c[t].nod]+=minim;
                        t=c[t].tata;
                        }            /*
                        for(j=1;j<=n;j++)
                            {
                            printf("%d ",viz[j]);
                            }
                        printf("\n");    */
                        
                    }
                }
            }
        } 
    p++;
    }               /*
for(i=1;i<=n;i++)
    {
    for(j=1;j<=n;j++)
        {
        printf("%d ",f[i][j]);
        }
    printf("\n");
    }                        */
printf("%d\n",fluxMaxim);
fclose(stdin);
fclose(stdout);
return 0;  
}