Pagini recente » Cod sursa (job #2387928) | Cod sursa (job #2018830)
#include <cstdio>
#include <vector>
using namespace std;
vector<int>v[1001];
int muc[1001][1001],m,n,viz[1001],q[1005];
int bfs()
{int j,flw=0,vf,i,st=0,dr=1,p;
q[0]=1;
for(i=2;i<=n;i++)viz[i]=0;
viz[1]=1;
while(st!=dr)
{
vf=q[st];
p=v[vf].size();
for(j=0;j<p;j++)
{i=v[vf][j];
if(muc[vf][i]!=0&&viz[i]==0)
{ if(i==n)
{viz[n]=vf;
int t=n,mi=9135136;
while(t!=1)
{
if(mi>muc[viz[t]][t])mi=muc[viz[t]][t];
t=viz[t];
}
t=n;
while(t!=1)
{
muc[viz[t]][t]-=mi;
muc[t][viz[t]]+=mi;
t=viz[t];
}
flw+=mi;viz[n]=0;
} else {
q[dr++]=i;
viz[i]=vf;
}
}
}
st++;
}
return flw;
}
int main()
{freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int i,a,b,c,flow=0;
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
v[a].push_back(b);
v[b].push_back(a);
muc[a][b]=c;
}
a=bfs();
flow+=a;
while(a)
{
a=bfs();
flow+=a;
}
printf("%d",flow);
return 0;
}