Cod sursa(job #3289366)

Utilizator McMeatGhenea Radu Stefan McMeat Data 26 martie 2025 16:51:36
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>
using namespace std;
// #define cin fein
// #define cout g
#define NMAX 1010
#define INF 1000001
#define pii pair<int,int>
#define piii pair<int, pii>
ifstream fein("maxflow.in");
ofstream g("maxflow.out");
int n, m, a, b, c, ceva, cost[NMAX][NMAX], v[NMAX], t[NMAX];
vector<int> l[NMAX];



void update_flux(int nod)
{
    int aux=nod, mn=INF;

    while(t[nod])
    {
        mn=min(cost[t[nod]][nod], mn);
        nod=t[nod];
    }
    nod=aux;
    while(t[nod])
    {
        cost[t[nod]][nod]-=mn;
        nod=t[nod];
    }
    if(mn!=INF)
        ceva+=mn;
}

void bfs(int nod)
{
    deque<int> d;
    d.push_back(nod);
    while(!d.empty())
    {
        int nc=d.front();
        d.pop_front();
        for(int i=0;i<l[nc].size();i++)
        {
            int vc=l[nc][i];
            int cvc=cost[nc][vc];
            if(!v[vc]&&cvc>0)
            {
                v[vc]=1;
                d.push_back(vc);
                t[vc]=nc;
            }
        }
    }
}

int main()
{
    fein>>n>>m;
    while(fein>>a>>b>>c)
    {
        l[a].push_back(b);
        cost[a][b]=c;
    }
    v[1]=1;
    bfs(1);
    update_flux(n);
    while(v[n]==1)
    {
        for(int i=0;i<=n;i++)
        {
            v[i]=0;
            t[i]=0;
        }
        v[1]=1;
        bfs(1);
        update_flux(n);
    }
    cout<<ceva;


    return 0;
}