Pagini recente » Cod sursa (job #855713) | Cod sursa (job #1669877) | Cod sursa (job #2910858) | Cod sursa (job #1574615) | Cod sursa (job #544710)
Cod sursa(job #544710)
#include <stdio.h>
#include <vector>
using namespace std;
int c[1024][1024],f[1024][1024],v[1024],q[1024],p[1024],n,m,sol;
vector <int> g[1024];
int bfs()
{
int i,j,a,b;
for (i=2;i<=n;++i) v[i]=0;
v[1]=1;q[0]=1;q[1]=1;
for (i=1;i<=q[0];++i)
{
a=q[i];
if (a!=n)
for (j=0;j<g[a].size();++j)
{
b=g[a][j];
if ((c[a][b]>f[a][b])&&(!v[b]))
{
++q[0];
q[q[0]]=b;
p[b]=a;
v[b]=1;
}
}
}
return v[n];
}
int main()
{
int i,a,x,y,z,t;
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);
g[x].push_back(y);
g[y].push_back(x);
c[x][y]=z;
}
while (bfs())
for (i=0;i<g[n].size();++i)
{
a=g[n][i];
if ((c[a][n]>f[a][n])&&v[a])
{
p[n]=a;
t=111111;
for (a=n;a!=1;a=p[a])
t=min(t,c[p[a]][a]-f[p[a]][a]);
a=p[n];
for (a=n;a!=1;a=p[a])
{
f[p[a]][a]+=t;
f[a][p[a]]-=t;
}
sol+=t;
}
}
printf("%d",sol);
return 0;
}