Cod sursa(job #3336806)

Utilizator MihaisiatatPavel Mihai-George Mihaisiatat Data 25 ianuarie 2026 23:26:22
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bitset>
#include<fstream>
#include <vector>

using namespace std;

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

int capacitate[1005][1005];

vector<vector<int> > muchii(1005);
int n, m;

int flow_maxim;

int last_flow;

bitset<1005> viz;
bool dfs(int nod, int flow_minim) {
    viz[nod] = 1;
    if (nod == n) {
        flow_maxim += flow_minim;
        last_flow = flow_minim;
        return true;
    }
        for (auto vecin : muchii[nod]) {
            if ( capacitate[nod][vecin] > 0 and viz[vecin] == 0) {
                bool x = dfs(vecin  , min(flow_minim,capacitate[nod][vecin]));
                if (x == true) {
                    capacitate[nod][vecin] -= last_flow;
                    capacitate[vecin][nod] += last_flow;
                    return true;
                }
            }
        }
    return false;
}

int main() {
    fin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int a, b, cap;
        fin >> a >> b >> cap;
        muchii[a].push_back(b);
        muchii[b].push_back(a);
        capacitate[a][b] = capacitate[a][b] + cap;
    }

    while (dfs(1, 10000000)) {
        for (int i = 1; i<=n ; i++) {
            viz[i] = 0;
        }
    }
fout<<flow_maxim;
}