Pagini recente » Cod sursa (job #772047) | Cod sursa (job #2965025) | Cod sursa (job #1906046) | Cod sursa (job #1852825) | Cod sursa (job #2360780)
#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;
}