Pagini recente » Cod sursa (job #1099523) | Cod sursa (job #1720597) | Cod sursa (job #1886206) | Cod sursa (job #995118) | Cod sursa (job #2189126)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int i,flux,j,x,y,c,n,m,s,d,q[1001],viz[1001],F[1001][1001],C[1001][1001];
void read()
{
f>>n>>m;
s=1;
d=n;
for(i=1;i<=m;++i)
{
f>>x>>y>>c;
C[x][y]=c;
}
}
int bfs()
{
int i,u,p,x;
p=1;
u=1;
q[p]=s;
viz[s]=1;
while(p<=u && !viz[d])
{
x=q[p];
++p;
for(i=1;i<=n;++i)
if(!viz[i])
if(F[x][i]<C[x][i])
{
q[++u]=i;
viz[i]=x;
}
}
if(viz[d])
return 0;
return 1;
}
void ek()
{
int i,a,b,lg,v;
int L[1001];
do
{
for(i=1;i<=n;++i)
viz[i]=0;
if(bfs())
return;
int nod=n;
a=110001;
while(nod!=1)
{
a=min(a,C[viz[nod]][nod]-F[viz[nod]][nod]);
nod=viz[nod];
}
v=a;
nod=n;
while(nod!=1)
{
F[viz[nod]][nod]+=v;
F[nod][viz[nod]]-=v;
nod=viz[nod];
}
flux=flux+v;
}while(1);
}
void afis()
{
g<<flux<<'\n';
}
int main()
{
read();
ek();
afis();
return 0;
}