Cod sursa(job #1853812)

Utilizator andreiudilaUdila Andrei andreiudila Data 22 ianuarie 2017 09:20:33
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
int n,m,x,y,cost,i,flow;
int c[1001][1001];
int t[1001],q[1001];
bool viz[1001];
void update()
{
    int mini=2000000000;
    int aux=n;

    while(aux>1)
    {
        mini=min(mini,c[t[aux]][aux]);
        aux=t[aux];
    }

    flow+=mini;
    aux=n;

    while(aux>1)
    {
        c[t[aux]][aux]-=mini;
        c[aux][t[aux]]+=mini;
        aux=t[aux];
    }

}
bool bfs()
{
    q[1]=1;
    int l=1, r=1;
    int nod=1;
    int ok=0;

    memset(viz,0,sizeof(viz));
    viz[1]=1;

    while(l<=r)
    {
        nod=q[l];
        l++;

        for(int i=1;i<=n;++i)
        {
            if(viz[i]==0 && c[nod][i]>0)
            {
                t[i]=nod;
                if(i==n) update(), ok=1;
                else
                q[++r]=i, viz[i]=1;
            }
        }
    }

    return ok;

}
int main()
{
    cin>>n>>m;
    for(i=1;i<=m;++i)
    {
        cin>>x>>y>>cost;
        c[x][y]=cost;
    }

    while(bfs())
    {

    }

    cout<<flow;

    return 0;
}