Pagini recente » Cod sursa (job #837377) | Cod sursa (job #2833208) | Cod sursa (job #2794881) | Cod sursa (job #291499) | Cod sursa (job #2944828)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1000;
ifstream fin( "maxflow.in" );
ofstream fout( "maxflow.out" );
vector <int> edges[NMAX+1];
int capacity[NMAX+1][NMAX+1];
int source, dest;
int parent[NMAX+1];
queue <int> q;
void bfs( int node ) {
while( !q.empty() )
q.pop();
q.push( source );
while( !q.empty() ) {
auto qfront = q.front();
q.pop();
if( qfront == dest )
return;
for( auto vec: edges[qfront] ) {
if( !parent[vec] && capacity[qfront][vec] ) {
parent[vec] = qfront;
q.push( vec );
}
}
}
}
int main() {
int n, m, a, b, c, node, flow, i, new_flow;
fin >> n >> m;
for( i = 0; i < m; i++ ) {
fin >> a >> b >> c;
capacity[a][b] = c;
edges[a].push_back( b );
edges[b].push_back( a );
}
source = 1;
dest = n;
parent[source] = -1;
bfs( source );
flow = 0;
while( parent[dest] ) {
for( auto vec: edges[n] ) {
parent[dest] = vec;
node = dest;
new_flow = 1e9;
while( node != source && parent[node] && capacity[parent[node]][node] ) {
new_flow = min( new_flow, capacity[parent[node]][node] );
node = parent[node];
}
if( node == source ) {
node = dest;
while( node != source ) {
capacity[parent[node]][node] -= new_flow;
capacity[node][parent[node]] += new_flow;
node = parent[node];
}
flow += new_flow;
}
}
for( i = 1; i <= n; i++ )
parent[i] = 0;
parent[source] = -1;
bfs( source );
}
fout << flow;
return 0;
}