Cod sursa(job #1103983)

Utilizator cata_popescuPopescu Catalina cata_popescu Data 10 februarie 2014 11:09:35
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>

using namespace std;

ifstream g1("maxflow.in");
ofstream g2("maxflow.in");

int c[1001][1001],f[1001][1001],t[1001],n,m,s,d,v[1001],flux;

int BF(int s, int d)
{
    int p,u,x,i;
    for(i=1;i<=n;i++) t[i]=0;
    p=u=1;v[p]=s;t[s]=-1;
    while(p<=u)
    {
        x=v[p];
        for(i=1;i<=n;i++)
        {
            if(!t[i]&&c[x][i]>f[x][i])
            {
                v[++u]=i;
                t[i]=x;
                if(i==d) return 1;
            }
        }
        p++;
    }
    return 0;
}

void ford_fulkerson()
{
    int i,x;
    while(BF(s,d))
    {
        x=10000;
        i=d;
        while(i!=s)
        {
            if(c[t[i]][i]-f[t[i]][i]<x) x=c[t[i]][i]-f[t[i]][i];
            i=t[i];
        }
        i=d;
        while(i!=s)
        {
            f[t[i]][i]+=x;
            f[i][t[i]]-=x;
            i=t[i];
        }
        flux+=x;
    }
}
int main()
{
    int x,y,z,i,j;
    g1>>n>>m>>s>>d;
    for(i=1;i<=m;i++)
    {
        g1>>x>>y>>z;
        c[x][y]=z;
    }
    ford_fulkerson();
    g2<<flux<<'\n';
    //for(i=1;i<=n;i++){for(j=1;j<=n;j++) g2<<f[i][j]<<" "; g2<<'\n';}
    return 0;
}