Cod sursa(job #3289699)

Utilizator Ruxandra009Ruxandra Vasilescu Ruxandra009 Data 28 martie 2025 10:36:55
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
#include <climits>

using namespace std;

ifstream f("maxflow.in");
ofstream g("maxflow.out");

const int inf = INT_MAX;

int n, m, fl[1005][1005], cost[1005][1005], fr[1005], t[1005];
vector<int> v[1005];

bool bfs()
{
    int num[1005];
    for(int i = 0; i <= n; i ++) fr[i] = num[i] = 0;

    num[0] = num[1] = 1; fr[1] = 1;
    for(int i = 1; i <= num[0]; i ++)
    {
        int nod = num[i];
        for(auto x : v[nod])
        {
            if(cost[nod][x] == fl[nod][x] || fr[x])
                continue;

            fr[x] = 1; num[++ num[0]] = x;
            t[x] = nod;

            if(x == n)
                return true;
        }
    }

    return false;
}

int main()
{
    f >> n >> m;
    for(int i = 1; i <= m; i ++)
    {
        int x, y, c; f >> x >> y >> c;
        cost[x][y] += c;
        v[x].push_back(y);
        v[y].push_back(x);
    }

    int flow, fmin;
    for(flow = 0; bfs(); flow += fmin)
    {
        fmin = inf;
        for(int i = n; i != 1; i = t[i])
            fmin = min(fmin, cost[t[i]][i] - fl[t[i]][i]);

        for(int i = n; i != 1; i = t[i])
        {
            fl[t[i]][i] += fmin;
            fl[i][t[i]] -= fmin;
        }
    }

    g << flow;
    return 0;
}