Cod sursa(job #2537184)

Utilizator Tudor2PopescuPopescu Tudor-Cristian Tudor2Popescu Data 3 februarie 2020 11:38:48
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,viz[1024],T[1024],c[1024],f,Ct[1024][1024],F[1024][1024];
int sursa,dest;
int bf()
{
    int p,u,x,i;
    for(i=1;i<=n;i++)
    {
        viz[i]=0;
    }
    p=u=1;
    c[1]=sursa;
    while(p<=u)
    {
        x=c[p];
        for(i=1;i<=n;i++)
        {
            if(Ct[x][i]-F[x][i]>0 && viz[i]==0)
            {
                u++;
                c[u]=i;
                viz[i]=1;
                T[i]=x;
            }
        }
        p++;
    }
    return viz[dest];
}
int main()
{
    int x,y,c,minn,i,j;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>c;
        Ct[x][y]=c;
    }
    sursa=1;
    dest=n;
    while(bf())
    {
        for(i=1;i<=n;i++)
        {
            if(Ct[i][n]-F[i][n]>0)
            {
                minn=Ct[i][n]-F[i][n];
                for(j=i;j!=1;j=T[j])
                {
                    if(Ct[T[j]][j]-F[T[j]][j]<minn)
                    {
                        minn=Ct[T[j]][j]-F[T[j]][j];
                    }

                }
                for(j=i;j!=1;j=T[j])
                {
                    F[T[j]][j]+=minn;
                    F[j][T[j]]-=minn;
                }
                F[i][n]+=minn;
                F[n][i]-=minn;
                f+=minn;
            }
        }
    }
    fout<<f;
    fin.close();
    fout.close();
    return 0;
}