Pagini recente » Cod sursa (job #1519600) | Cod sursa (job #2137346) | Cod sursa (job #1973318) | Cod sursa (job #1128019) | Cod sursa (job #389817)
Cod sursa(job #389817)
#include<fstream.h>
int leg[10100],ver[10100],start[1100],c[1100][1100],x,y,viz[1100],q[1100],m,n,padre[1100],k,add,flou;
int bfs()
{
int u=1,p=1,t,i;
for(i=2;i<=n;i++)
viz[i]=0;
q[u]=1;
while(p<=u)
{
if(q[p]!=n)
{
t=start[q[p]];
while(t)
{
if(!viz[ver[t]]&&c[q[p]][ver[t]])
{
viz[ver[t]]++;
q[++u]=ver[t];
padre[ver[t]]=q[p];
}
t=leg[t];
}
}
p++;
}
return viz[n];
}
int main()
{
int i,tt,t;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>t;
c[x][y]=t;
ver[++k]=y;
leg[k]=start[x];
start[x]=k;
ver[++k]=x;
leg[k]=start[y];
start[y]=k;
}
viz[1]=1;
while(bfs())
{
t=start[n];
while(t)
{
if(viz[ver[t]]&&c[ver[t]][n])
{
padre[n]=ver[t];
add=(1<<30);
tt=n;
while(padre[tt])
{
if(add>c[padre[tt]][tt])
add=c[padre[tt]][tt];
tt=padre[tt];
}
tt=n;
if(add)
while(padre[tt])
{
c[padre[tt]][tt]-=add;
c[tt][padre[tt]]+=add;
tt=padre[tt];
}
flou+=add;
}
t=leg[t];
}
}
g<<flou;
return 0;
}