Pagini recente » Cod sursa (job #2371512) | Cod sursa (job #2901694) | Cod sursa (job #2527460) | Cod sursa (job #393717) | Cod sursa (job #1002497)
#include<fstream>
#include<vector>
#include<string.h>
#define N_max 1005
#define inf 0x3f3f3f3f
using namespace std;
int C[N_max][N_max];
int F[N_max][N_max];
vector <int> G[N_max];
int n,m;
int TT[N_max];
int coada[N_max];
int viz[N_max];
int BFS()
{
int i,j,V ,nod;
coada[0]=1;
coada[1]=1;
memset(viz,0,sizeof(viz));
viz[1]=1;
for(i=1;i<=coada[0];i++)
{
nod=coada[i];
if(nod==n)continue;
for(j=0;j<G[nod].size();j++)
{
V=G[nod][j];
if(F[nod][V]==C[nod][V]||viz[V])continue;
viz[V]=1;
TT[V]=nod;
coada[++coada[0]]=V;
}
}
return viz[n];
}
int main()
{
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int x,y,z,i,nod,flow,fmin;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>z;
C[x][y]=z;
G[x].push_back(y);
G[y].push_back(x);
}
for(flow=0;BFS();)
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;
fmin=inf;
for(nod=n;nod!=1;nod=TT[nod])
fmin=min(fmin,C[TT[nod]][nod]-F[TT[nod]][nod]);
if(fmin==0)continue;
for(nod=n;nod!=1;nod=TT[nod])
{
F[TT[nod]][nod]+=fmin;
F[nod][TT[nod]]-=fmin;
}
flow+=fmin;
}
fout<<flow;
}