Cod sursa(job #2475706)

Utilizator greelioGreenio Greely greelio Data 17 octombrie 2019 13:35:00
Problema Flux maxim Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include<bits/stdc++.h>
#define N 1030

using namespace std;

int rs, n,m;
queue<int>Q;
int viz[N], a[N][N];
vector<int>V[N];

int BFS(int x) {
    Q.push(x);
    for (int i=2; i<=n; i++) viz[i]=0;
    viz[x]=-1;
    while (Q.size()) {
        x=Q.front(); Q.pop();
        for (auto it: V[x]) {
            if (!viz[it] && a[x][it]>0) {
                viz[it]=x;
                Q.push(it);
            }
        }
    }
    return viz[n]!=0;
}

int main() {
    ifstream cin("maxflow.in");
    ofstream cout("maxflow.out");
    cin>>n>>m;

    for (int i=1; i<=m; i++) {
        int x,y,c; cin>>x>>y>>c;
        V[x].push_back(y);
        V[y].push_back(x);
        a[x][y]+=c;
    }

    while (BFS(1)) {
        for (auto it:V[n]) {
            if (viz[it]==-1 || !a[it][n]) continue;
            int flow=a[it][n];
            for (int i=it; viz[i]!=-1; i=viz[i]) {
                flow=min(flow, a[viz[i]][i]);
            }

            rs+=flow;
            for (int i=it; viz[i]!=-1; i=viz[i]) {
                a[viz[i]][i]-=flow;
                a[i][viz[i]]+=flow;
            }
        }

    }
    cout<<rs;
}