Cod sursa(job #882906)

Utilizator ghegoiu1Ghegoiu Stefan ghegoiu1 Data 19 februarie 2013 15:57:19
Problema Flux maxim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <queue>
#include <cstring>
#define INF 0x3f3f
using namespace std;
int m,S,D,n,T[10000],C[2400][2400],F[2400][2400];
ifstream f("maxflow.in");
ofstream g("maxflow.out");
inline int BF()
{
    int i,now;
    queue <int> Q;
    Q.push(S);
    memset(T,0,sizeof(T));
    T[S]=-1;
    while (!Q.empty()) {
        now=Q.front();
        Q.pop();
        for (i=1;i<=n;i++)
            if (T[i]==0 && C[now][i]>F[now][i])
                {
                    Q.push(i);
                    T[i]=now;
                    if (i==D) return 1;
                }
    }
    return 0;
}

inline void flux_max()
{
    int r,i,flux=0;
    while ( BF() )
        {
            r=INF;
            i=D;
            while (i!=S)
                {
                    r=min(r,C[T[i]][i]-F[T[i]][i]);
                    i=T[i];
                }
            i=D;
            while (i!=S)
                {
                    F[T[i]][i] +=r;
                    F[i][T[i]] -=r;
                    i=T[i];
                }
            flux+=r;
        }
    g<<flux;
}

int main()
{
    int i,x,y,c;
    f>>n>>m;
    S=1;D=n;
    for (i=1;i<=m;i++) {
        f>>x>>y>>c;
        C[x][y]=c;
    }
    flux_max();
    return 0;
}