Pagini recente » Cod sursa (job #29401) | Cod sursa (job #2110) | Cod sursa (job #1964026) | Cod sursa (job #377154) | Cod sursa (job #553147)
Cod sursa(job #553147)
#include<fstream>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
#define NMAX 1005
#define INF 1<<30
using namespace std;
int N,M;
vector<int> G[NMAX];
int cd[NMAX],C[NMAX][NMAX],F[NMAX][NMAX],TT[NMAX];
int viz[NMAX];
int BF()
{
int i,j,V,nod;
cd[0]=1;
cd[1]=1;
memset(viz, 0, sizeof(viz));
viz[1]=1;
for(i=1;i<=cd[0];i++)
{
nod=cd[i];
if (nod == N) continue;
for(j=0;j<G[nod].size();j++)
{
V=G[nod][j];
if(C[nod][V]==F[nod][V] || viz[V])
continue;
viz[V]=1;
cd[ ++cd[0] ]=V;
TT[V]=nod;
}
}
return viz[N];
}
int main()
{
ifstream in("maxflow.in");
ofstream out("maxflow.out");
in>>N>>M;
int i,x,y,z,flow,fmin,nod;
for(i=1;i<=M;i++)
{
in>>x>>y>>z;
C[x][y]+=z;
G[x].push_back(y);
G[y].push_back(x);
}
for(flow=0;BF();)
for(i=0;i<G[N].size();i++)
{
nod=G[N][i];
if(F[nod][N]==C[nod][N] || !viz[nod]) continue;
TT[N]=nod;
for(nod=N;nod!=1;nod=TT[nod])
fmin=min(fmin,C[ TT[nod] ][nod]-F[ TT[nod] ][nod]);
if(!fmin) continue;
for(nod=N;nod!=1;nod=TT[nod])
{
F[TT[nod]][nod]-=fmin;
F[nod][TT[nod]]+=fmin;
}
flow+=fmin;
}
out<<flow;
in.close();
out.close();
return 0;
}