Cod sursa(job #3332035)

Utilizator Bogdan222Bogdan Caraeane Bogdan222 Data 3 ianuarie 2026 12:28:19
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include <queue>
#include <stack>
using namespace std;
#define pii pair<int, int>
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const char nl = '\n';
const int NMAX = 1001;

vector<int> g[NMAX];
int flow[NMAX][NMAX], cap[NMAX][NMAX], parent[NMAX], r[NMAX][NMAX];
int flux (int source, int dest) {
    fill(parent, parent + NMAX, -1);
    queue<int> q;
    q.push(source);
    parent[source] = source;
    while (!q.empty()) {
        int nod = q.front();
        q.pop();
        if (nod == dest) {
            return 1;
        }
        for (auto neigh: g[nod]) {
            if (cap[nod][neigh] - flow[nod][neigh] > 0 && parent[neigh] == -1) {
                parent[neigh] = nod;
                q.push(neigh);

            }
        }
    }
    return 0;
    
}




int main () {
    int n,m;
    fin >> n >> m;
    for (int i = 0; i < m; i++) {
        int x,y,z;
        cin >> x >> y >> z;
        g[x].push_back(y);
        g[y].push_back(x);
        cap[x][y] = z;
        
    }
    int max_flow = 0;
    while (flux(1,n)) {
        int nod = n;
        int min = cap[parent[nod]][nod] - flow[parent[nod]][nod];
        nod = parent[nod];
        while (nod != 1) {
            if (cap[parent[nod]][nod] - flow[parent[nod]][nod] < min) {
                min = cap[parent[nod]][nod] - flow[parent[nod]][nod];
            }
            nod = parent[nod];
        }
        int nod = n;
        while (nod != 1) {
            flow[parent[nod]][nod] += min;
            flow[nod][parent[nod]] -= min;
            nod = parent[nod];
        }
        max_flow += min;
    }


}