Cod sursa(job #2418019)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 2 mai 2019 21:20:20
Problema Flux maxim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream>
#include<queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
queue<int> q;
vector<int> v[1010];
int c[1010][1010],t[1010],i,a,b,n,m,cap,d[1010],f[1010][1010],mini,sol;
int const inf=1000000000;
int bfs()
{
    for(int i=1;i<=n;i++) d[i]=0;
    int nod;
    q.push(1);d[1]=1;
    while(!q.empty())
    {
        nod=q.front();q.pop();
        for(auto ve:v[nod])
            if(d[ve]==0&&f[nod][ve]<c[nod][ve])
            {
                t[ve]=nod;
                d[ve]=1;
                q.push(ve);
            }
    }
    return d[n];
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b>>cap;
        v[a].push_back(b);
        v[b].push_back(a);
        c[a][b]=cap;
    }
    while(bfs())
    {
        for(auto nod:v[n])if(d[nod]&&c[nod][n]>f[nod][n])
        {
            b=n;a=nod;mini=inf;
            while(a!=0)
            {
                mini=min(c[a][b]-f[a][b],mini);
                b=a;a=t[a];
            }
            b=n;a=nod;
            while(a!=0)
            {
                f[a][b]+=mini;f[b][a]-=mini;
                b=a;a=t[a];
            }
            f[n][nod]+=mini;
            sol+=mini;
        }
    }
    fout<<sol;
    return 0;
}