Cod sursa(job #2337081)

Utilizator cc4infinityCojocaru Catalin cc4infinity Data 5 februarie 2019 21:11:00
Problema Flux maxim Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

int n,m,i,j,a,b,x,s;
int g[1001][1000],p[1002];
vector<int> t[1003];
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

bool bfs()
{
    queue<int> q;
    q.push(n);
    p[n]=-1;
    while (!q.empty())
    {
        a=q.front();
        q.pop();
        int nr=t[a].size();
        for (i=0;i<nr;i++)
            if (p[t[a][i]]==0 && g[a][t[a][i]])
        {
            p[t[a][i]]=a;
            q.push(t[a][i]);
        }
    }
    return (p[1]);
}

int main()
{
    fin>>n>>m;
    for (i=1;i<=m;i++)
    {
        fin>>a>>b>>x;
        g[b][a]=x;
        t[b].push_back(a);
    }
    while (bfs())
    {
        a=1;
        x=1000000;
        while (p[a]>0)
        {
            b=p[a];
            x=min(x,g[b][a]);
            a=b;
        }
        a=1;
        while (p[a]>0)
        {
            b=p[a];
            g[b][a]-=x;
            g[a][b]+=x;
            a=b;
        }
        for (int j=1;j<=n;j++) p[j]=0;
        s+=x;
    }
    fout<<s;
    return 0;
}