Cod sursa(job #3229743)

Utilizator Darius1414Dobre Darius Adrian Darius1414 Data 17 mai 2024 11:44:58
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <climits>
#include <deque>
#define nmx 1005
using namespace std;
int n,a,b,c,m,r[nmx][nmx],from[nmx];
bool bfs (int start,int ending)
{
    for (int i=1;i<=n;i++)
        from[i]=0;
    from[start]=-1;
    deque <int> dq;
    dq.push_back(start);
    while (!dq.empty())
    {
        auto u=dq.front();
        dq.pop_front();
        for (int i=1;i<=n;i++)
        {
            if (r[u][i]>0 && !from[i])
            {
                from[i]=u;
                dq.push_back(i);
            }
        }
    }
    return from[ending]!=0;
}
int main()
{
    ifstream f ("maxflow.in");
    ofstream g ("maxflow.out");
    f>>n>>m;
    while (f>>a>>b>>c)
        r[a][b]+=c;
    int source=1,dest=n;
    long long netflow=0;
    while (bfs(source,dest))
    {
        int flow=INT_MAX;
        int u=dest;
        while (u!=source)
        {
            if (r[from[u]][u]<flow)
                flow=r[from[u]][u];
            u=from[u];
        }
        u=dest;
        while (u!=source)
        {
            r[from[u]][u]-=flow;
            r[u][from[u]]+=flow;
            u=from[u];
        }
        netflow+=flow;
    }
    if (netflow) g<<netflow;
    else g<<"Apa nu ajunge!";
}