Cod sursa(job #272560)
#include<fstream.h>
#include<string.h>
#define nx 1025
#define min(x,y) ((x)<(y)?(x):(y))
int cap[nx][nx],flux[nx][nx];
int n,tat[nx],m;
int bfs(int s,int d)
{
memset(tat,0,sizeof(tat));
tat[s]=-1;
int Q[nx];Q[0]=s;
for (int p=0,u=0;p<=u;++p)
for (int i=1,nod=Q[p];i<=n;++i)
if (!tat[i] && cap[nod][i]>flux[nod][i])
{
Q[++u]=i;
tat[i]=1;
if (i==d) return 1;
}
return 0;
}
int FLUX()
{
int i,j,r,sz=0;
for(;bfs(1,n);)
for (i=1;i<=n;++i)
{
if (tat[i]<=0 || cap[i][n]<=flux[i][n])
continue;
r=cap[i][n]-flux[i][n];
for (j=i;j!=1;j=tat[j])
r=min(r,cap[tat[j]][j]-flux[tat[j]][j]);
if (!r)
continue;
flux[i][n]+=r;
flux[n][i]-=r;
for (j=i;j!=1;j=tat[j])
{
flux[tat[j]][j]+=r;
flux[j][tat[j]]-=r;
}
sz+=r;
}
return sz;
}
int main()
{
ifstream be ("maxflow.in");
ofstream ki ("maxflow.out");
be>>n>>m;
int x,y,z;
for (int i=1;i<=m;++i)
{
be>>x>>y>>z;
cap[x][y]=z;
}
be.close();
ki<<FLUX()<<'\n';
ki.close();
return 0;
}