Cod sursa(job #238916)

Utilizator crawlerPuni Andrei Paul crawler Data 3 ianuarie 2009 17:32:08
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <stdio.h>
#include <string.h>

#define Nmax 1024

int c[Nmax][Nmax], f[Nmax][Nmax];
int q[Nmax], t[Nmax], l[Nmax],n,m;

int bfs()
{
    memset(q,0,sizeof(q));
    memset(t,0,sizeof(t));
    q[1] = 1; t[1] = 1;
    int st=0, dr=1, nod;
    
    while(st<dr)
    {
        nod = q[++st];
        for (int i=1;i<=n;++i) if (t[i] == 0)
        if (f[nod][i] < c[nod][i])
        {
           t[i] = nod;
           q[++dr] = i;              
        }
    }
    if (t[n] == 0) return 0;
    return 1;    
}

int main()
{
    freopen("maxflow.in","r",stdin);
    freopen("maxflow.out","w",stdout);
    
    scanf("%d%d", &n,&m);
    
    int x,y,z, flow=0;
    
    for (int i=1;i<=m;++i)
    {
        scanf("%d%d%d", &x,&y,&z);  
        c[x][y] += z;  
    }
 
    while (bfs())
    {
          
          int add = 123456789;
          for (int nod = n;nod!=1;nod=t[nod])
          if (c[t[nod]][nod] < add) add = c[t[nod]][nod];
          for (int nod = n;nod!=1;nod=t[nod])
          {
              f[t[nod]][nod] += add;
              f[nod][t[nod]] -= add;
          }
          flow += add;
    }
    
    printf("%d\n", flow);
            
    return 0;
}