Cod sursa(job #2663377)

Utilizator qThunderStefan Durlanescu qThunder Data 26 octombrie 2020 11:09:20
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <vector>
#include <queue>
#define MX 2000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector <int> a[1004];
queue <int> q;
int v[1004],c[1004][1004],f[1004][1004],t[1004],n,m,x,y,z,s;
int bfs()
{
    for(int i=0;i<=1000;i++)
        v[i]=0;
    v[1]=1;
    q.push(1);
    bool k=false;
    while(q.empty()!=1)
    {
        int i=q.front();
        q.pop();
        for(int j=0;j<a[i].size();j++)
        {
            int vecin=a[i][j];
            if(v[vecin]==0 && c[i][vecin]>f[i][vecin])
            {
                v[vecin]=1;
                q.push(vecin);
                t[vecin]=i;
                if(vecin==n)
                    k=true;
            }
        }
    }
    return k;
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>z;
        a[x].push_back(y);
        a[y].push_back(x);
        c[x][y]=z;
        ///c[y][x]=0;
    }
    while(bfs()==true)
    {
        int d=MX;
        for(x=n;t[x]!=0;x=t[x])
            d=min(d,c[t[x]][x]-f[t[x]][x]);
        s+=d;
        for(x=n;t[x]!=0;x=t[x])
        {
            f[t[x]][x]+=d;
            f[x][t[x]]-=d;
        }
    }
    fout<<s;
    return 0;
}