Cod sursa(job #2469404)

Utilizator MihneaGhiraMihnea MihneaGhira Data 7 octombrie 2019 00:42:00
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include<fstream>
#include <bitset>
#include<vector>
#include <deque>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,nod,s,minim,x,y,k;
int C[1001][1001],flux[1001][1001];
int T[1001];
vector <int> v[1001];
bitset <1001> f;
deque <int> coada;

int bfs(){
    f.reset();
    coada.push_back(1);
    f[1]=1;
    while(!coada.empty()){
        for(int i=0;i<v[coada.front()].size();i++){
            nod=v[coada.front()][i];
            if(!f[nod] && C[coada.front()][nod]-flux[coada.front()][nod]>0){
                f[nod]=1;
                T[nod]=coada.front();;
                coada.push_back(nod);
            }
        }

        coada.pop_front();
    }

    return f[n];
}

int main(){
    fin>>n>>m;
    for(int i=1;i<=m;i++){
        fin>>x>>y>>k;
        v[x].push_back(y);
        v[y].push_back(x);
        C[x][y]=k;
    }

    while(bfs()){
        nod=n;
        minim=200000000;
        while(nod!=1){
            minim=min(minim,C[T[nod]][nod]-flux[T[nod]][nod]);
            nod=T[nod];
        }
        nod=n;
        while(nod!=1){
            flux[T[nod]][nod]+=minim;
            flux[nod][T[nod]]-=minim;
            nod=T[nod];
        }
        s+=minim;
    }
    fout<<s;
    return 0;
}