Pagini recente » Cod sursa (job #2030491) | Cod sursa (job #1021168) | Cod sursa (job #289596) | Cod sursa (job #442695) | Cod sursa (job #355820)
Cod sursa(job #355820)
#include <algorithm>
using namespace std;
#define DIM (1<<8)
int n, m, flx, min0, frc[ DIM ], muc[ DIM ][ DIM ];
int drum( int nod ) {
int i;
if( nod == n )
return 1;
for( i = 1; i <= n; ++i )
if( muc[ nod ][ i ] > 0 && !frc[ i ] ) {
min0 = min( min0, muc[ nod ][ i ] );
if( drum( i ) ) {
muc[ nod ][ i ] -= min0;
muc[ i ][ nod ] += min0;
return 1;
}
}
return 0;
}
void init() {
int i, j;
for( i = 1; i <= n; ++i )
for( j = 1; j <= n; ++j )
muc[ i ][ j ] = -1;
}
void read() {
int i, x0, y0, flx0;
scanf( "%d%d", &n, &m );
init();
for( i = 0; i < m; ++i ) {
scanf( "%d%d%d", &x0, &y0, &flx0 );
muc[ x0 ][ y0 ] = flx0;
muc[ y0 ][ x0 ] = 0;
}
}
void solve() {
int i, ok;
do {
ok = 0;
frc[ 1 ] = 1;
for( i = 2; i <= n; ++i )
frc[ i ] = 0;
for( i = 1; i <= n; ++i )
if( muc[ 1 ][ i ] > 0 ) {
min0 = muc[ 1 ][ i ];
if( drum( i ) ) {
muc[ 1 ][ i ] -= min0;
muc[ i ][ 1 ] += min0;
flx += min0;
ok = 1;
i = n;
}
}
}
while( ok );
printf( "%d", flx );
}
int main() {
freopen( "maxflow.in", "r", stdin );
freopen( "maxflow.out", "w", stdout );
read();
solve();
return 0;
}