Cod sursa(job #606689)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 8 august 2011 12:26:25
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <string.h>

#define INF 1 << 20
using namespace std;

int n,m,x,y,z,r,fx,i;
int c[1001][1001];
int f[1001][1001];
int q[1001],t[1001];

ifstream in("maxflow.in");
ofstream out("maxflow.out");

int Bf() {
    int st,dr,x,i;
    st=dr=1;
    memset(t,0,sizeof(t));
    q[1]=1;
    t[1]=-1;
    while (st<=dr) {
       x=q[st];
       for (i=1; i<=n; i++)
        if (i!=x && t[i]==0 && c[x][i]>f[x][i]) {
         dr++;
         q[dr]=i;
         t[i]=x;
         if (i==n) return 1;
        }
       st++;
    }
    return 0;
}

int main () {
    in >> n >> m;
    memset(c,0,sizeof(c));
    for (i=1; i<=m; i++) {
       in >> x >> y >> z;
       c[x][y]=z;
    }
    memset(f,0,sizeof(f));

    fx=0;
    while (Bf()) {
       r=INF;
       i=n;
       while (i!=1) {
          r=min(r,c[t[i]][i]-f[t[i]][i]);
          i=t[i];
       }
       i=n;
       while (i!=1) {
          f[t[i]][i]+=r;
          f[i][t[i]]-=r;
          i=t[i];
       }
       fx+=r;
    }
    out << fx << '\n';
    return 0;
}