Cod sursa(job #2360780)

Utilizator Tudor2PopescuPopescu Tudor-Cristian Tudor2Popescu Data 2 martie 2019 10:03:35
Problema Flux maxim Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>
#define Nmax 5002
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,viz[Nmax],T[Nmax],c[Nmax],f,Ct[Nmax][Nmax],F[Nmax][Nmax];
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,min1,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)
            {
                min1=Ct[i][n]-F[i][n];
                for(j=i;j!=1;j=T[j])
                {
                    if(Ct[T[j]][j]-F[T[j]][j]<min1)
                    {
                        min1=Ct[T[j]][j]-F[T[j]][j];
                    }
                }
                for(j=i;j!=1;j=T[j])
                {
                    F[T[j]][j]=F[T[j]][j]+min1;
                    F[j][T[j]]=F[j][T[j]]+min1;
                }
                F[i][n]+=min1;
                F[n][i]-=min1;
                f+=min1;
            }
        }
    }
    fout<<f;
    fin.close();
    fout.close();
    return 0;
}