Pagini recente » Cod sursa (job #2522583) | Cod sursa (job #1430193) | Cod sursa (job #446380) | Cod sursa (job #1596433) | Cod sursa (job #464937)
Cod sursa(job #464937)
#include <stdio.h>
struct nod
{
int nr;
nod *adr;
} *graf[1005],*u;
int n,m,x,y,z,c[1005][1005],f[1005][1005],q[1005],st,dr,s[1005],t[1005],min,sol,i,j;
bool k;
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1;i<=m;++i)
{
scanf("%d %d %d",&x,&y,&z);
c[x][y]=z;
u=new nod;
u->nr=y;
u->adr=graf[x];
graf[x]=u;
u=new nod;
u->nr=x;
u->adr=graf[y];
graf[y]=u;
}
k=true;
while (k)
{
k=false;
q[1]=1;
st=1;
dr=1;
for (i=2;i<=n;++i)
s[i]=0;
s[1]=1;
while (st<=dr)
{
if (q[st]==n)
k=true;
else
for (u=graf[q[st]];u;u=u->adr)
if (c[q[st]][u->nr]>f[q[st]][u->nr] && !s[u->nr])
{
s[u->nr]=1;
q[++dr]=u->nr;
t[u->nr]=q[st];
}
++st;
}
if (k)
for (u=graf[n];u;u=u->adr)
if (s[u->nr] && c[u->nr][n]>f[u->nr][n])
{
min=c[u->nr][n]-f[u->nr][n];
for (i=u->nr;i!=1;i=t[i])
if (c[t[i]][i]-f[t[i]][i]<min)
min=c[t[i]][i]-f[t[i]][i];
if (min>0)
{
t[n]=u->nr;
for (i=n;i!=1;i=t[i])
{
f[t[i]][i]+=min;
f[i][t[i]]-=min;
}
sol+=min;
}
}
}
printf("%d",sol);
return 0;
}