Cod sursa(job #3336679)

Utilizator QwertyDvorakQwerty Dvorak QwertyDvorak Data 25 ianuarie 2026 12:37:07
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <queue>
#include <fstream>

using namespace std;

int n, m;
int cap[1005][1005];
vector<int> adj[1005];

ifstream fin("maxflow.in");
ofstream fout("maxflow.out");



void edmonds_karp(int source, int dest){
    long long ans = 0;

    while(true){
        vector<int> dad(n + 1, -1);
        queue<int> q;

        dad[source] = source;
        q.push(source);

        while(!q.empty() && dad[dest] == -1){
            int x = q.front(); q.pop();
            for(int v : adj[x]){
                if(dad[v] == -1 && cap[x][v] > 0){
                    dad[v] = x;
                    q.push(v);
                }
            }
        }

        if(dad[dest] == -1) break; 

        int minDrum = INT_MAX;
        for(int p = dest; p != source; p = dad[p]){
            minDrum = min(minDrum, cap[dad[p]][p]);
        }

        for(int p = dest; p != source; p = dad[p]){
            cap[dad[p]][p] -= minDrum;
            cap[p][dad[p]] += minDrum;
        }

        ans += minDrum;
    }

    fout << ans << "\n";
}
int main(){
    int x, y, z;
    fin >> n >> m;
    for(int i = 0; i < m; i++){
        fin >> x >> y >> z;
        adj[x].push_back(y);
        adj[y].push_back(x);
        cap[x][y] = z;
    }
    edmonds_karp(1, n);
    return 0;
}