Pagini recente » Cod sursa (job #2971598) | Cod sursa (job #3153279) | Cod sursa (job #1464305) | Cod sursa (job #2145248) | Cod sursa (job #2179350)
#include <iostream>
#include <fstream>
using namespace std;
int n,m,i,viz[1002],prim,ultim,coada[1002],nod,C[1002][1002],F[1002][1002],t[1002],x,y,c,j,minim,flux;
int bf()
{
for(i=1; i<=n; i++)
viz[i]=0;
prim=1; ultim=1;
coada[1]=1;
while(prim<=ultim)
{
nod=coada[prim++];
for(i=1; i<=n; i++)
if(C[nod][i]-F[nod][i]>0 && viz[i]==0)
{
viz[i]=1;
t[i]=nod;
coada[++ultim]=i;
}
}
return viz[n];
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i=1; i<=m; i++)
{
scanf("%d%d%d", &x, &y, &c);
C[x][y]=c;
}
while(bf())
{
for(j=1; j<=n; j++)
if(C[j][n]-F[j][n]>0)
{
minim=C[j][n]-F[j][n];
for(i=j; i!=1; i=t[i])
if(C[t[i]][i]-F[t[i]][i]<minim)
minim=C[t[i]][i]-F[t[i]][i];
for(i=j; i!=1; i=t[i])
{
F[t[i]][i]+=minim;
F[i][t[i]]-=minim;
}
F[j][n]+=minim;
F[n][j]-=minim;
flux+=minim;
}
}
printf("%d", flux);
return 0;
}