Cod sursa(job #2204927)

Utilizator biaiftimeIftime Bianca biaiftime Data 17 mai 2018 11:28:45
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>
#include <vector>
#include <queue>
#include <iostream>

#define Nmax 1002
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int F[Nmax][Nmax],C[Nmax][Nmax];
vector<int>muchii_graf[Nmax];
int n,m;
int FLUX;
void Read()
{
    int x,y,cost,i;
    fin>>n>>m;
    for(i=0;i<m;++i)
    {
        fin>>x>>y>>cost;
        muchii_graf[x].push_back(y);
        muchii_graf[y].push_back(x);
        C[x][y]=cost;
    }
}
int Flux()
{
    int x;
    queue<int>c;
    vector<int>t(n+1);
    vector<int>viz(n+1);
    c.push(1);
    viz[1]=1;
    while(!c.empty())
    {
        x=c.front();
        c.pop();
        for(int i:muchii_graf[x])
            if(viz[i]==0)
        {
           if(F[x][i]==C[x][i])
            continue;
           t[i]=x;
           c.push(i);
           viz[i]=1;
        }
    }
    int nrmin=200000000;
    if(viz[n]==0)return 0;
    for(int nod=n;nod!=1;nod=t[nod])
    {
        nrmin=min(nrmin,C[t[nod]][nod]-F[t[nod]][nod]);
    }
    for(int nod=n;nod!=1;nod=t[nod])
    {
        F[t[nod]][nod]+=nrmin;
        F[nod][t[nod]]-=nrmin;
    }
    return nrmin;
}
int main()
{
    Read();
    int  flux = 0;
    while(true) {
        int acum = Flux();
        if (acum == 0)
            break;
        flux += acum;
    }
    fout<<flux<<"\n";
    return 0;
}