Cod sursa(job #2543062)

Utilizator valentin12Valentin Ion Semen valentin12 Data 10 februarie 2020 20:07:40
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#define Nmax 1024

using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");

int n,m,viz[Nmax],T[Nmax],c[Nmax],ff=0,Ct[Nmax][Nmax],F[Nmax][Nmax];
int sursa,dest;

int bfs()
{
int p,x,u,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)
{
c[++u]=i;
viz[i]=1;
T[i]=x;
}
p++;
}

return viz[dest];

}

int main()
{
int x,y,c,i,j,minn;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
Ct[x][y]=c;
}

sursa=1;
dest=n;

while(bfs())
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;
ff+=minn;
}

g<<ff;


    return 0;
}