Pagini recente » Cod sursa (job #2788041) | Cod sursa (job #1845447) | Cod sursa (job #1050899) | Cod sursa (job #2105607) | Cod sursa (job #2156041)
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
ifstream f ("maxflow.in");
ofstream g ("maxflow.out");
vector < int > G[1005];
int n, m, inflow[1005][1005], i, j, a, b, c, mi, flux, pa[1005];
int fv[1005];
int bfs()
{
memset( fv, 0 , sizeof(fv) );
queue < int > q;
q.push( 1 );
fv[1] = 1;
pa[n] = -1;
while ( !q.empty() )
{
int aux = q.front();
q.pop();
for ( int i = 0 ; i < G[ aux ].size() ; i++ )
{
if ( (fv[ G[aux][i] ] == 0) && (inflow[aux][ G[aux][i] ] > 0) )
{
q.push( G[aux][i] );
pa[ G[aux][i] ] = aux;
fv[ G[aux][i] ] = 1;
}
}
}
return fv[n];
}
int main()
{
f>>n>>m;
for ( i = 1; i <= m ; i++ )
{
f>>a>>b>>c;
G[a].push_back(b);
G[b].push_back(a);
inflow[a][b] += c;
}
while ( bfs() )
{
int mi = INT_MAX;
int nod;
for (nod=n; nod!=1; nod=pa[nod])
{
mi = min(mi, inflow[ pa[nod] ][nod]);
}
for (nod=n; nod!=1; nod=pa[nod])
{
inflow[ pa[nod] ][nod] -= mi;
inflow[nod][ pa[nod] ] += mi;
}
flux += mi;
}
g<<flux;
}