Cod sursa(job #2207574)

Utilizator trutruvasilicaHuhurez Marius trutruvasilica Data 25 mai 2018 23:15:10
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <bits/stdc++.h>
#define MAX_INF 9999999
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int C[1001][1001],F[1001][1001],viz[1001],tata[1001],n,m;
vector<int>H[1001];
queue<int>Q;
bool bfs()
{
    viz[1]=1;
    Q.push(1);
    while(Q.size())
    {
        int nod=Q.front();
        for(vector<int>::iterator i=H[nod].begin();i!=H[nod].end();i++)
        {
            if(C[nod][*i]==F[nod][*i] || viz[*i]==1) continue;
            tata[*i]=nod;
            viz[*i]=1;
            Q.push(*i);
            if(*i==n) return 1;
        }
        Q.pop();
    }
    return 0;
}
int main()
{
    int i,a,b,c,flux=0,fmin;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        H[a].push_back(b);
        H[b].push_back(a);
        C[a][b]+=c;
    }
    while(bfs())
    {
        fmin=MAX_INF;
        for(i=n;i!=1;i=tata[i])
        {
            fmin=min(fmin,C[tata[i]][i]-F[tata[i]][i]);
        }
        for(i=n;i!=1;i=tata[i])
        {
            F[tata[i]][i]+=fmin;
            F[i][tata[i]]-=fmin;
        }
        flux+=fmin;
        memset(viz,0,sizeof(viz));
        while(Q.size()) Q.pop();
    }
    fout<<flux;
}