Cod sursa(job #2381437)

Utilizator greelioGreenio Greely greelio Data 16 martie 2019 19:26:58
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include<bits/stdc++.h>
#define N 1010
using namespace std;

const int inf=1e9;
int n,m, rs;
int viz[N];
int a[N][N];
vector<int>V[N];
queue<int>Q;

bool BFS(int x) {
    Q.push(x);
    for (int i=2; i<=n; ++i) viz[i]=-1;
    while (Q.size()) {
        x=Q.front(); Q.pop();
        for (auto it:V[x]) {
            if (viz[it]==-1 && a[x][it]>0) {
                Q.push(it);
                viz[it]=x;
                if (it==n) {
                    while (Q.size()) Q.pop();
                    return 1;
                }
            }
        }
    } return 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=inf;
        for (int i=n; viz[i]; i=viz[i]) {
            flow=min(flow, a[viz[i]][i]);
        } rs+=flow; //cout<<"!"<<flow<<" ";
        for (int i=n; viz[i]; i=viz[i]) {
            a[viz[i]][i]-=flow;
            a[i][viz[i]]+=flow;
        }
    }
    cout<<rs;


    return 0;
}