Pagini recente » Cod sursa (job #2711597) | Cod sursa (job #2967209) | Cod sursa (job #2121613) | Cod sursa (job #808102) | Cod sursa (job #318164)
Cod sursa(job #318164)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define file_in "maxflow.in"
#define file_out "maxflow.out"
#define Nmax 1111
#define Inf 0x3f3f3f3f
int f[Nmax][Nmax];//fluxul
int c[Nmax][Nmax];//capacitatea
int n,m,x,y,co,viz[Nmax],max_flow;
void citire()
{
int i;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &n,&m);
for (i=0;i<m;++i)
{
scanf("%d %d %d", &x,&y,&co);
c[x][y]=co;
}
}
bool bfs()
{
int i,p,u,Q[Nmax];
Q[0]=1;
p=u=0;
viz[1]=-1;
while(p<=u)
{
x=Q[p];
for (i=1;i<=n;++i)
if (!viz[i])
if (c[x][i]>f[x][i])
{
Q[++u]=i;
viz[i]=x;
if (i==n)
return true;
}
p++;
}
return false;
}
inline int abs(int a) {return a>=0?a:-a;}
int ek()
{
int i,v,j;
max_flow=0;
for (;bfs();)
for (i=1;i<=n;++i)
{
if (viz[i]<=0 || c[i][n]<=f[i][n])
continue;
v=c[i][n]-f[i][n];
for (j=i;j!=1;j=viz[j])
v=min(v,c[viz[j]][j]-f[viz[j]][j]);
if (v==0) continue;
f[i][n]+=v;
f[n][i]-=v;
for (j=i;j!=1;j=viz[j])
{
f[viz[j]][j]+=v;
f[j][viz[j]]-=v;
}
max_flow+=v;
}
return max_flow;
}
void afisare()
{
printf("%d", ek());
}
int main()
{
citire();
afisare();
fclose(stdin);
fclose(stdout);
return 0;
}