Pagini recente » Cod sursa (job #1795893) | Cod sursa (job #1282379) | Cod sursa (job #88532) | Cod sursa (job #1972942) | Cod sursa (job #2386720)
#include <bits/stdc++.h>
#define maxn 1000
#define maxm 5000
#define inf INT_MAX/2-1
using namespace std;
vector <int> g[maxn+5];
vector <int> way;
int _cap[maxn+5][maxn+5], _flx[maxn+5][maxn+5];
bool viz[maxn+5];
int n, m, flag;
void dfs ( int nod )
{
int i, sz = g[nod].size(), nn;
viz[nod] = 1;
way.push_back (nod);
if ( nod == n - 1 ) { flag = 0; return; }
for ( i = 0; i < sz && flag; i++ )
{
nn = g[nod][i];
if ( viz[nn] == 0 && _cap[nod][nn] > _flx[nod][nn] ) dfs (nn);
}
}
int main ()
{
ifstream fin ( "maxflow.in" );
ofstream fout ( "maxflow.out" );
fin >> n >> m;
int i, a, b, c, sz, delta, ans = 0;
for ( i = 0; i < m; i++ )
{
fin >> a >> b >> c; a--; b--;
g[a].push_back (b); _cap[a][b] = c;
g[b].push_back (a); _cap[b][a] = 0;
}
flag = 1; dfs (0);
while ( flag == 0 )
{
sz = way.size(); delta = inf;
for ( i = 0; i < sz-1; i++ ) delta = min (delta, _cap[way[i]][way[i+1]] - _flx[way[i]][way[i+1]]);
for ( i = 0; i < sz-1; i++ ) _flx[way[i]][way[i+1]] += delta, _flx[way[i+1]][way[i]] -= delta;
for ( i = 0; i < n; i++ ) viz[i] = 0;
way.clear(); flag = 1; dfs (0);
}
sz = g[0].size();
for ( i = 0; i < sz; i++ ) ans += _flx[0][g[0][i]];
fout << ans;
fin.close ();
fout.close ();
return 0;
}