Pagini recente » Cod sursa (job #298219) | Cod sursa (job #2124437) | Cod sursa (job #3183401) | Cod sursa (job #1836458) | Cod sursa (job #400626)
Cod sursa(job #400626)
#include<stdio.h>
#include<vector>
#define Nmax 1010
#define INF 1<<30
#define Min(a,b) a<b ? a : b
using namespace std;
int C[Nmax][Nmax],F[Nmax][Nmax],T[Nmax],flux,i,n,m,r,a,b,c,Q[Nmax];
vector <int> V[Nmax];
int bfs()
{
int nod,u=1,p,i,N,fiu;
Q[1]=1; T[1]=-1;
memset(T,0,sizeof(T));
for(p=1;p<=u;p++)
{
nod=Q[p];
N=V[nod].size();
for(i=0;i<N;i++)
{
fiu=V[nod][i];
if(!T[i] && C[nod][fiu] > F[nod][fiu])
{
Q[++u]=fiu;
T[fiu]=nod;
if(fiu==n) return 1;
}
}
}
return 0;
}
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",&a,&b,&c);
V[a].push_back(b);
//V[b].push_back(a);
C[a][b]=c;
}
for(flux=0; bfs(); flux+=r)
{
r=INF;
for(i=n; i!=1; i=T[i])
r=Min(r, C[T[i]][i]-F[T[i]][i]);
for(i=n; i!=1; i=T[i])
{
F[T[i]][i]+=r;
F[i][T[i]]-=r;
}
}
printf("%d",flux);
return 0;
}