Cod sursa(job #3294835)

Utilizator Darius1414Dobre Darius Adrian Darius1414 Data 29 aprilie 2025 12:43:30
Problema Flux maxim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
#define nmx 1005
#define inf 1000000000
using namespace std;
int n,m,a,b,c,cant[nmx][nmx],F[nmx][nmx],rsp,bck[nmx];
bool vf[nmx];
vector <int> v[nmx];
bool bfs()
{
    deque <int> dq;
    dq.push_back(1);
    for (int i=1; i<=n; i++)
        vf[i]=0;
    while (!dq.empty())
    {
        auto u=dq.front();
        dq.pop_front();
        for (auto it : v[u])
        {
            if (vf[it] || cant[u][it]==F[u][it])
                continue;
            bck[it]=u;
            vf[it]=1;
            if (it==n)
                return 1;
            dq.push_back(it);
        }
    }
    return 0;
}
int main()
{
    ifstream f ("maxflow.in");
    ofstream g ("maxflow.out");
    f>>n>>m;
    for (int i=1; i<=m; i++)
    {
        f>>a>>b>>c;
        cant[a][b]+=c;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    while (1)
    {
        int ok=bfs();
        if (!ok) break;
        int now=n;
        int ct=inf;
        while (now!=1)
        {
            ct=min(ct,cant[bck[now]][now]-F[bck[now]][now]);
            now=bck[now];
        }
        now=n;
        while (now!=1)
        {
            F[bck[now]][now]+=ct;
            F[now][bck[now]]-=ct;
            now=bck[now];
        }
        rsp+=ct;
    }
    g<<rsp;
}