Cod sursa(job #1640224)

Utilizator NightSilentIridon Stefan NightSilent Data 8 martie 2016 16:32:37
Problema Flux maxim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define INF 0x3f3f
using namespace std;
ifstream h("maxflow.in");
ofstream g("maxflow.out");
int n,m,S,D,c[1001][1001],f[1001][1001],t[1001],flux;
void citire()
{
    int i,x,y,C;
    h>>n>>m;
    S=1;
    D=n;
    for (i=1;i<=m;i++)
        {
            h>>x>>y>>C;
            c[x][y]=C;
        }
}
int BF(int s,int d)
{
    int p,u,nod,i,q[1001];
    memset(t,0,sizeof(t));
    p=0;
    u=0;
    q[p]=s;
    t[s]=-1;
    for (;p<=u;p++)
    {
        nod=q[p];
        for (i=1;i<=n;i++)
            if (!t[i] && c[nod][i]>f[nod][i])
                {
                    q[++u]=i;
                    t[i]=nod;
                    if (i==d)
                        return 1;
                }
    }
    return 0;
}
void flux_maxim(void)
{
    int i,r=0;
    for (flux=0;BF(S,D);flux+=r)
    {
        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];
        }
    }
}
int main()
{
    citire();
    flux_maxim();
    g<<flux;
    return 0;
}