Cod sursa(job #245271)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 17 ianuarie 2009 15:23:29
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<stdio.h>
#include<string.h>
#define N 1024
#define INF 100000000

long q[N], c[N][N], tata[N],n;

int bfs(){
long x,p,u,i,j;
     memset(tata,0,N * sizeof(long));
     q[0]=1;tata[1]=1;
     for (p=0,u=0;p<=u && !tata[n] ;p++){
         x=q[p];
         for (j=1;j<=n && !tata[n] ;j++)
             if (c[x][j]>0 && !tata[j]){
                tata[j]=x;q[++u]=j;
             }     
     }
     return (tata[n]);
}

int main (){
long x,y,z,flux=0,i,m,min;
    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",&x,&y,&z);
        c[x][y]=z;}
    
    
    while (bfs()){
          min=INF;
          
          for (i=n;i!=1;i=tata[i])
              if (c[tata[i]][i]<min) min=c[tata[i]][i];
          for (i=n;i!=1;i=tata[i]) c[tata[i]][i]-=min,c[i][tata[i]]+=min;
          
          flux+=min;    
    }
    
    printf("%d\n",flux);
    
    
    return 0;
}