Pagini recente » Cod sursa (job #1341023) | Cod sursa (job #1759602) | Cod sursa (job #1216579) | Cod sursa (job #956102) | Cod sursa (job #1875639)
#include <fstream>
#include <cstdio>
#include <vector>
#include <cstring>
#define Nmax 1002
#define inf 1e9
using namespace std;
ofstream g("maxflow.out");
int n,fw[Nmax][Nmax],C[Nmax],m,x,y,c,T[Nmax],rez;
bool viz[Nmax];
vector<int> V[Nmax];
bool bfs()
{
C[0] = 0;
C[++C[0]] = 1;
memset(viz,0,sizeof(viz));
for (int i=1;i<=C[0];i++)
{
int now = C[i];
if (now == n)
continue;
for (int j=0;j<V[now].size();j++)
{
if (fw[now][V[now][j]]==0 || viz[V[now][j]])
continue;
C[++C[0]] = V[now][j];
viz[V[now][j]] = 1;
T[V[now][j]] = now;
}
}
return viz[n];
}
int main()
{
freopen("maxflow.in","r",stdin);
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&c);
fw[x][y] = c;
V[x].push_back(y);
V[y].push_back(x);
}
while (bfs())
{
for (int i=0;i<V[n].size();i++)
{
if (fw[V[n][i]][n]==0 || !viz[V[n][i]])
continue;
T[n] = V[n][i];
int Fmin = inf;
for (int nod = n; nod!=1; nod = T[nod])
Fmin = min(Fmin,fw[T[nod]][nod]);
for (int nod = n; nod!=1; nod = T[nod])
{
fw[T[nod]][nod] -= Fmin;
fw[nod][T[nod]] += Fmin;
}
rez+=Fmin;
}
}
g<<rez;
return 0;
}