Pagini recente » Cod sursa (job #2362224) | Cod sursa (job #713026) | Cod sursa (job #2830247) | Cod sursa (job #1770856) | Cod sursa (job #1685941)
#include <iostream>
#include <fstream>
#define nmax 1014
#define inf 299999999
using namespace std;
long c[nmax][nmax],f[nmax][nmax];
int g[nmax][nmax];
int n,s,d,q[nmax],viz[nmax],l[nmax];
int abs(int x){if(x>0)return x;return -x;}
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int bfs(int x)
{int in,sf,i,y,v;
in=sf=0;
q[in]=x;
viz[x]=1;
while(in<=sf && !viz[d])
{y=q[in++];
for(i=1;i<=g[y][0];i++)
{v=g[y][i];
if(c[y][v]==f[y][v] || viz[v])continue;
viz[v]=y;
q[++sf]=v;
}
}
return !viz[d];
}
void ek()
{int i,lg,j;
long v;
while(1)
{
for(i=1;i<=n;i++)viz[i]=0;
if(bfs(1))return;
for(i=1;i<=g[n][0];i++)
{j=g[n][i];
if(f[j][n]==c[j][n] || !viz[j])continue;
viz[n]=j;
lg=0;
l[0]=d;
v=inf;
while(l[lg]!=s)
{ l[++lg]=viz[l[lg-1]];
v=min(v,c[l[lg]][l[lg-1]]-f[l[lg]][l[lg-1]]);
}
while(lg)
{f[l[lg]][l[lg-1]]+=v;
f[l[lg-1]][l[lg]]-=v;
lg--;
}
}
}
}
int main()
{int m,i,x,y,cap;
fin>>n>>m;
s=1;d=n;
for(i=1;i<=m;i++)
{
fin>>x>>y>>cap;
c[x][y]=cap;
g[x][0]++;
g[x][g[x][0]]=y;
g[y][0]++;
g[y][g[y][0]]=x;
}
ek();
long rez=0;
for(i=1;i<=g[n][0];i++)
rez+=f[g[n][i]][n];
fout<<rez;
}