Cod sursa(job #2475704)

Utilizator greelioGreenio Greely greelio Data 17 octombrie 2019 13:32:14
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 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)) {
        int flow=2e9;
        for (int i=n; viz[i]!=-1; i=viz[i]) {
            flow=min(flow, a[viz[i]][i]);
        }

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