Pagini recente » Cod sursa (job #1614352) | Cod sursa (job #2444708) | Cod sursa (job #3151637) | Cod sursa (job #1597720) | Cod sursa (job #899483)
Cod sursa(job #899483)
#include<cstdio>
#include<cstdlib>
int m,n,i,j,t[1013],q[1013],c[1013][1013],f[1013][1013],x,y,z;
struct point
{
int x;
point *y;
}*g[1013];
inline void intro(int x, int y, int z)
{
point *p=new point;
p->x=y;
p->y=g[x];
g[x]=p;
c[x][y]+=z;
}
inline bool bf()
{
int i,j,x;
point *p;
for(i=2;i<=n;++i)t[i]=0;
i=j=0;
q[0]=1;
while(i<=j)
{
x=q[i];
for(p=g[x];p!=NULL;p=p->y)
if(c[x][p->x]>f[x][p->x] && t[p->x]==0)
{
q[++j]=p->x;
t[p->x]=x;
}
++i;
}
if(t[n]!=0)return 1;
return 0;
}
inline void flux()
{
point *p;
int x,min;
while(bf())
{
for(p=g[n];p!=NULL;p=p->y)
{
x=p->x;
if(c[x][n]>f[x][n])
{
min=c[x][n]-f[x][n];
while(x!=1 && min!=0)
{
if(min>c[t[x]][x]-f[t[x]][x])min=c[t[x]][x]-f[t[x]][x];
x=t[x];
}
if(min==0)continue;
x=p->x;
f[x][n]+=min;
f[n][x]-=min;
while(x!=1)
{
f[t[x]][x]+=min;
f[x][t[x]]-=min;
x=t[x];
}
}
}
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=0;i<m;++i)
{
scanf("%d%d%d",&x,&y,&z);
intro(x,y,z);
intro(y,x,0);
}
t[1]=1;
flux();
z=0;
for(i=1;i<=n;++i)z+=f[i][n];
printf("%d",z);
return 0;
}