Cod sursa(job #2274080)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 1 noiembrie 2018 12:25:26
Problema Flux maxim Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

const int N=1000+5;

int n,m;
int g[N][N];
int dad[N];
bool viz[N];

inline bool BFS()
{
    for(int i=1;i<=n;i++) viz[i]=0;
    viz[1]=1;
    dad[1]=-1;
    queue<int>q;
    q.push(1);
    while(!q.empty())
    {
        int nod=q.front();
        q.pop();
        for(int nou=1;nou<=n;nou++)
        {
            if(g[nod][nou]>0 && viz[nou]==0)
            {
                q.push(nou);
                dad[nou]=nod;
                viz[nou]=1;
            }
        }
    }
    return viz[n];
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b,x;
        fin>>a>>b>>x;
        g[a][b]=x;
    }
    int ans=0;
    while(BFS())
    {
        int flow=(1<<30);
        for(int nod=n;nod!=1;nod=dad[nod])
        {
            int nou=dad[nod];
            flow=min(flow,g[nou][nod]);
        }
        for(int nod=n;nod!=1;nod=dad[nod])
        {
            int nou=dad[nod];
            g[nou][nod]-=flow;
            g[nod][nou]+=flow;
        }
        ans+=flow;
    }
    fout<<ans<<"\n";
    return 0;
}