Pagini recente » Cod sursa (job #2189358) | Cod sursa (job #2634001) | Cod sursa (job #29462) | Cod sursa (job #2650819) | Cod sursa (job #1389300)
#include<fstream>
#include<string.h>
#define Nmax 1005
#define INF 9999999
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int F[Nmax][Nmax],C[Nmax][Nmax],T[Nmax],n,m,s,d,flux=0;
void citire()
{
f>>n>>m;
s=1; d=n;
int i,j,a,b;
while(m--)
{
f>>i>>j>>a;
C[i][j]=a;
}
}
int BF(int s,int d)
{
int p,u,nod,Q[Nmax],i;
memset(T,0,sizeof T);
p=u=1;
Q[p]=s;
T[s]=-1;
for(p=1;p<=u;++p)
{
nod=Q[p];
for(i=1;i<=n;++i)
if(!T[i]&&C[nod][i]>F[nod][i])
{
Q[++u]=i;
T[i]=nod;
if(i==d) return 1;
}
}
return 0;
}
void flux_max()
{
int i,r;
for(flux=0;BF(s,d);flux+=r)
{
r=INF;
i=d;
while(i-s)
{
r=min(r,C[T[i]][i]-F[T[i]][i]);
// g<<i<<" "<<C[T[i]][i]<<'\n';
i=T[i];
}
// g<<i<<" "<<C[T[i]][i]<<'\n';
// g<<r<<'\n';
i=d;
while(i-s)
{
F[T[i]][i]+=r;
F[i][T[i]]-=r;
i=T[i];
}
}
}
int main()
{
citire();
flux_max();
g<<flux<<'\n';
return 0;
}