Pagini recente » Rezultatele filtrării | Cod sursa (job #882905)
Cod sursa(job #882905)
#include <stdio.h>
# include <string.h>
# include <algorithm>
using namespace std;
int n,m,c[1010][1010],f[1010][1010],r,t[1010],i,x,y,fl;
int BFS()
{
int p,u,nod,i,q[1010];
memset(t,0,sizeof(t));
p=u=1;
t[1]=-1;
q[1]=1;
while (p<=u)
{
nod=q[p];
for (i=1; i<=n; i++)
if (t[i]==0 && c[nod][i]>f[nod][i])
{
t[i]=nod;
q[++u]=i;
if (i==n) return 1;
}
p++;
}
return 0;
}
void flux()
{
int i,j; int r;
while (BFS())
{
for (i=1; i<=n; i++)
{
if (t[i]==-1 || c[i][n]<=f[i][n])
continue;
r=c[i][n]-f[i][n];
for (j=i; j!=1 && j;)
{
r=min(r,c[t[j]][j]-f[t[j]][j]);
j=t[j];
}
if (r==0) continue;
f[i][n]+=r;
f[n][i]-=r;
for (j=i; j!=1;)
{
f[t[j]][j]+=r;
f[j][t[j]]-=r;
j=t[j];
}
fl+=r;
}
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d\n",&n,&m);
for (i=1; i<=m; i++)
{
scanf("%d %d %d\n",&x,&y,&r);
c[x][y]=r;
}
fl=0;
flux();
printf("%d\n",fl);
return 0;
}