Cod sursa(job #2811417)

Utilizator ElizaTElla Rose ElizaT Data 2 decembrie 2021 11:16:39
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1e3,INF = 2e9;
vector <int> e[NMAX + 5];
int cap[NMAX + 5][NMAX + 5],flux[NMAX + 5][NMAX + 5];
bool viz[NMAX + 5];
int ans = 0,n,m;

int dfs(int node, int fluxmn) {
    if (fluxmn == 0 || viz[node])
        return 0;
    if (node == n) {
        ans += fluxmn;
        return fluxmn;
    }
    viz[node] = 1;
    int x,y,s = 0;
    for (int i = 0;i < e[node].size();i++) {
        if (cap[node][e[node][i]] > flux[node][e[node][i]]) {
            y = cap[node][e[node][i]] - flux[node][e[node][i]];
            x = dfs(e[node][i], min(fluxmn, y));
            fluxmn -= x;
            s += x;
            flux[node][e[node][i]] += x;
            flux[e[node][i]][node] -= x;
        }
    }
    return s;
}
void init() {
    for (int i = 1;i <= n;i++)
        viz[i] = 0;
}
int main()
{
    ifstream fin("maxflow.in");
    ofstream fout("maxflow.out");
    int u,v,cost;
    fin >> n >> m;
    for (int i = 0;i < m;i++) {
        fin >> u >> v;
        fin >> cap[u][v];
        e[u].push_back(v);
        e[v].push_back(u);
    }
    while (dfs(1, INF)) {
        init();
    }
//    for (int i = 1;i <= n;i++) {
//        for (int j = 1;j <= n;j++) {
//            fout << cap[i][j] << " ";
//        }
//    }
    fout << ans;
    return 0;
}