Cod sursa(job #2278388)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 7 noiembrie 2018 23:04:03
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
#define Dim 1008
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int N,M,a,b,c,T[1008],C[Dim][Dim],ans;
vector < int > Vf[Dim];

int BFS()
{
    int X[Dim],s=1,d=1;
    memset(X,0,sizeof(X));
    memset(T,0,sizeof(T));
    X[1]=1; T[1]=-1;
    while(s<=d)
    {
        int x=X[s++];
        for(int i=1;i<=N;i++)
        if(T[i]==0&&C[x][i]>0)
        {
            T[i]=x;
            X[++d]=i;
            if(i==N) return 1;
        }
    }
    return 0;
}

int Flux_max()
{
    while(BFS())
    {
        int cpmin=99999999,it=N;
        while(it!=1)
        {
            cpmin=min(cpmin,C[T[it]][it]);
            it=T[it];
        }
        it=N;
        while(it!=1)
        {
            C[T[it]][it]-=cpmin;
            C[it][T[it]]+=cpmin;
            it=T[it];
        }
        ans+=cpmin;
    }
    return ans;
}

int main()
{
    f>>N>>M;

    for(int i=1;i<=M;i++)
    {
       f>>a>>b>>c;
       C[a][b]+=c;
       Vf[a].push_back(b);
       Vf[b].push_back(a);
    }
    g<<Flux_max();
    return 0;
}