Cod sursa(job #2547376)

Utilizator CandyBucherGaube Robert Gabriel CandyBucher Data 15 februarie 2020 12:07:36
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#define N 1010
#define inf 110000
using namespace std;

vector <int> v[N];

int n,a[N][N],t[N];

void citire()
{
    ifstream f("maxflow.in");
    int i,m,x,y,c; f>>n>>m;
    for(i=1;i<=m;i++){
        f>>x>>y>>c;
        v[x].push_back(y);
        v[y].push_back(x);
        a[x][y]=c;
    }
    f.close();
}
bool bfs()
{
    bool viz[N]; viz[n]=0;
    queue <int> q;
    int i,nv,nod; q.push(1);
    viz[1]=1;
    for(i=2;i<=n;i++) viz[i]=0;
    while(q.size()){
        nod=q.front();
        q.pop();
        for(i=0;i<v[nod].size();i++){
            nv=v[nod][i];
            if(!viz[nv]&&a[nod][nv]>0){
                q.push(nv);
                viz[nv]=1;
                t[nv]=nod;
            }
        }
    }
    return viz[n];
}
int main()
{
    citire(); int i,j,fmin,fmax=0;
    while(bfs()){
        fmin=inf;
        for(i=t[n],j=n;i!=0;j=i,i=t[i])
            if(a[i][j]<fmin) fmin=a[i][j];
        fmax+=fmin;
        for(i=t[n],j=n;i!=0;j=i,i=t[i]){
            a[i][j]-=fmin;
            a[j][i]+=fmin;
        }
    }
    ofstream o("maxflow.out");
    o<<fmax;
    o.close();
}