Cod sursa(job #1945647)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 29 martie 2017 16:58:19
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.82 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;
int vTati[1001],n,m;
vector <int> G[1001];
vector <int> :: iterator IT;
queue <int> deBFS;

int mCost[1001][1001],mFlux[1001][1001];

void citire()
{
    int aux1,aux2,aux3;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&aux1,&aux2,&aux3);
        G[aux1].push_back(aux2);
        G[aux2].push_back(aux1);
        mCost[aux1][aux2]=aux3;
    }
}
void bfs()
{
    int nod;

    for(int i=1;i<=n;i++)
        vTati[i]=0;

    vTati[1]=1;
    deBFS.push(1);
    while(!deBFS.empty())
    {
        nod=deBFS.front();
        deBFS.pop();
        for(IT=G[nod].begin();IT!=G[nod].end();IT++)
        {
            if(vTati[*IT]==0&&mFlux[nod][*IT]!=mCost[nod][*IT])
            {
                vTati[*IT]=nod;
                deBFS.push(*IT);
            }
        }
    }
}
int main()
{
    freopen("maxflow.in","r",stdin);
    freopen("maxflow.out","w",stdout);
    citire();
    int aux,flux=0x3f3f3f3f,ans=0;
    bfs();
    while(vTati[n])
    {
        for(IT=G[n].begin();IT!=G[n].end();IT++)
        {
            if(vTati[*IT])
            {
                vTati[n]=*IT;
                aux=n;
                while(aux!=1)
                {
                    flux=min(flux,mCost[vTati[aux]][aux]-mFlux[vTati[aux]][aux]);
                    aux=vTati[aux];
                }
                aux=n;
                while(aux!=1)
                {
                    mFlux[vTati[aux]][aux]+=flux;
                    mFlux[aux][vTati[aux]]-=flux;
                    aux=vTati[aux];
                }
            }
            if(flux!=0x3f3f3f3f)
            ans+=flux;
        }
        bfs();
    }
    printf("%d",ans);
    return 0;
}