Pagini recente » Cod sursa (job #2295790) | Cod sursa (job #1579700) | Cod sursa (job #1927581) | Cod sursa (job #1647406) | Cod sursa (job #1712130)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("maxflow.in");
ofstream g("maxflow.out");
#define N 1001
vector < int > l[N];
int c[N][N], f[N][N], viz[N], t[N], n, m, x, y, z;
int BFS()
{
queue < int > q;
int x;
for( int i = 1; i <= n; ++ i )
viz[i] = 0;
viz[1] = 1;
q.push(1);
while( !q.empty() )
{
x = q.front();
q.pop();
if( x != n )
{
for( vector < int > :: iterator it = l[x].begin(); it != l[x].end(); ++ it )
if( viz[ *it ] == 0 && c[x][*it] - f[x][*it] > 0 )
{
viz[*it] = 1;
q.push(*it);
t[*it] = x;
}
}
}
return viz[n];
}
int main()
{
in >> n >> m;
long long sol = 0;
for( int i = 0; i < m; ++ i )
{
in >> x >> y >> z;
c[x][y] = z;
l[x].push_back(y);
l[y].push_back(x);
}
while( BFS() )
{
for( vector < int > :: iterator it = l[n].begin(); it != l[n].end(); ++ it )
{
if( viz[*it] == 1 && c[*it][n] - f[*it][n] > 0 )
{
t[n] = *it;
int fmin = 2000000000;
for( int x = n; t[x]; x = t[x] )
if( c[t[x]][x] - f[t[x]][x] < fmin )
fmin = c[t[x]][x] - f[t[x]][x];
if( fmin > 0 )
{
for( int x = n; t[x]; x = t[x] )
{
f[t[x]][x] += fmin;
f[x][t[x]] -= fmin;
}
}
sol += fmin;
}
}
}
g << sol;
return 0;
}