Cod sursa(job #387122)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 26 ianuarie 2010 20:55:58
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<cstdio>
#include<fstream>
using namespace std;
int c[1005][1005],n,flow=0,t[1005];

void citire()
{
    int m,x,y,z;
    ifstream fin("maxflow.in");
    fin>>n>>m;
    for(;m;m--)
    {
        fin>>x>>y>>z;
        c[x][y]=z;
    }
}

int bfs(int s,int d)
{
    int coada[1005],st,dr,k,i;
    st=dr=1;
    for(i=1;i<=n;i++)
        t[i]=-1;
    coada[st]=s;
    t[s]=0;
    while(st<=dr)
    {
        k=coada[st++];
        for(i=2;i<=n;i++)
            if(t[i]==-1 && c[k][i]>0)
            {
                coada[++dr]=i;
                t[i]=k;
                if(i==d)
                    return 1;
            }
    }
    return 0;
}

void ek()
{
    int cmin=110001,i,j;
    while(bfs(1,n))
    {
        cmin=110001;
        for(i=n;t[i];i=t[i])
            if(c[t[i]][i]<cmin)
                cmin=c[t[i]][i];
        flow+=cmin;
        for(i=n;t[i];i=t[i])
        {
            c[t[i]][i]-=cmin;
            c[i][t[i]]+=cmin;
        }
    }
}

int main()
{
    citire();
    ek();
    ofstream fout("maxflow.out");
    fout<<flow;
    return 0;
}