Pagini recente » Cod sursa (job #79858) | Cod sursa (job #1185839) | Cod sursa (job #2399087) | Cod sursa (job #2355681) | Cod sursa (job #2385063)
#include <bits/stdc++.h>
#define maxn 1000
#define maxm 5000
#define inf INT_MAX/2-1
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
int n, m;
vector <int> g[maxn+5];
vector <int> way;
bool viz[maxn+5];
int _cap[maxn+5][maxn+5]; /// capacitatea unei muchii
int _flx[maxn+5][maxn+5]; /// fluxul unei muchii
void dfs ( int nod )
{
way.push_back (nod);
viz[nod] = 1;
if ( nod == n - 1 )
{
int delta = inf, i, sz = way.size();
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;
}
}
else
{
int i, nn, sz = g[nod].size();
for ( i = 0; i < sz; i++ )
{
nn = g[nod][i];
if ( viz[nn] == 0 && _flx[nod][nn] < _cap[nod][nn] )
dfs (nn);
}
}
way.pop_back();
viz[nod] = 0;
}
int main ()
{
ifstream fin ( "maxflow.in" );
ofstream fout ( "maxflow.out" );
fin >> n >> m;
int i, a, b, c;
for ( i = 0; i < m; i++ )
{
fin >> a >> b >> c; a--; b--;
g[a].push_back (b);
g[b].push_back (a); /// <- mch reziduala
_cap[a][b] = c;
}
dfs (0);
int ans = 0;
for ( i = 0; i < g[0].size(); i++ ) ans += _flx[0][g[0][i]];
fout << ans;
fin.close ();
fout.close ();
return 0;
}