Pagini recente » Cod sursa (job #4595) | Cod sursa (job #2095437) | Cod sursa (job #2074261) | Cod sursa (job #25948) | Cod sursa (job #672502)
Cod sursa(job #672502)
#include <fstream>
#include <vector>
using namespace std;
#define NMAX 1007
#define in "maxflow.in"
#define out "maxflow.out"
#define inf 100000000
ifstream fin(in);
ofstream fout(out);
int F[NMAX][NMAX],C[NMAX][NMAX],t[NMAX],viz[NMAX],q[NMAX];
int g[NMAX][NMAX];
int N,M,cnt = 0;
int bf(int nod)
{
cnt++;
int v,i,s,f,solved = 0;
viz[nod] = cnt;
q[1] = nod;
t[1] = 0;
s = f = 1;
while(s <= f)
{
nod = q[s++];
for(i = 1 ; i <= g[nod][0]; i++)
{
v = g[nod][i];
if(C[nod][v] > F[nod][v] && viz[v] != cnt)
{
viz[v] = cnt;
q[++f] = v;
t[v] = nod;
if(v == N)
return 1;
}
}
}
return 0;
}
int main()
{
fin>>N>>M;
int i,x,y,flow,fmin,nod,z;
for(i = 1; i <= M; i++)
{
fin>>x>>y>>z;
C[x][y] = z;
g[x][++g[x][0]] = y;
g[y][++g[y][0]] = x;
}
for(flow = 0; bf(1) == 1; flow += fmin)
{
fmin = inf;
for(nod = N; nod != 1; nod = t[nod])
fmin = min(fmin,C[t[nod]][nod] - F[t[nod]][nod]);
for(nod = N; nod != 1; nod = t[nod])
F[t[nod]][nod] += fmin, F[nod][t[nod]] -= fmin;
}
fout<<flow<<'\n';
fin.close();
fout.close();
return 0;
}