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