Pagini recente » Cod sursa (job #2987380) | Cod sursa (job #1392977) | Cod sursa (job #1527284) | Cod sursa (job #1075435) | Cod sursa (job #2537184)
#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;
}