Cod sursa(job #2843582)

Utilizator butasebiButa Gabriel-Sebastian butasebi Data 2 februarie 2022 18:04:37
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <bits/stdc++.h>
using namespace std;
int st, dr, n, m, i, x, y, c, nod, coada[1005], dad[1005], flux[1005][1005], capacity[1005][1005], minn_flow, maxx_flow;
bool viz[1005];
vector <int> v[1005];
void BFS()
{
    memset(viz, false, sizeof(viz));
    coada[1] = 1;
    st = 1;
    dr = 1;
    viz[1] = true;
    while(st <= dr)
    {
        int nod1 = coada[st];
        for(int i = 0; i < v[nod1].size(); i ++)
        {
            int nod2 = v[nod1][i];
            if(viz[nod2] == false && capacity[nod1][nod2] != flux[nod1][nod2])
            {
                viz[nod2] = true;
                dad[nod2] = nod1;
                coada[++ dr] = nod2;
            }
        }
        st ++;
    }
}
int main()
{
    ifstream f("maxflow.in");
    ofstream g("maxflow.out");
    f >> n >> m;
    for(i = 1; i <= m; i ++)
    {
        f >> x >> y >> c;
        capacity[x][y] = c;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    while(true)
    {
        BFS();
        if(viz[n] == false)break;
        nod = n;
        minn_flow = INT_MAX;
        while(nod != 1)
        {
            minn_flow = min(minn_flow, capacity[dad[nod]][nod] - flux[dad[nod]][nod]);
            nod = dad[nod];
        }
        nod = n;
        while(nod != 1)
        {
            flux[dad[nod]][nod] += minn_flow;
            flux[nod][dad[nod]] -= minn_flow;
            nod = dad[nod];
        }
        maxx_flow += minn_flow;
    }
    g << maxx_flow << "\n";
    return 0;
}