Pagini recente » Istoria paginii utilizator/aurasslam | Cod sursa (job #795324) | Istoria paginii runda/cnrvxa1/clasament | Cod sursa (job #1736381) | Cod sursa (job #355948)
Cod sursa(job #355948)
#include <algorithm>
using namespace std;
#define DIM ( 1<<10 )
#define INF ( 1<<30 )
int n, m, cd[ DIM ], tat[ DIM ], viz[ DIM ], cst[ DIM ][ DIM ];
void init_cst() {
int i, j;
for( i = 1; i <= n; ++i )
for( j = 1; j <= n; ++j )
cst[ i ][ j ] = -1;
}
void init_viz() {
int i;
for( i = 1; i <= n; ++i )
viz[ i ] = 0;
}
int bf() {
int i, st, dr, nod;
cd[ 0 ] = 1;
viz[ 1 ] = 1;
for( st = dr = 0; st <= dr; ++st ) {
nod = cd[ st ];
for( i = 2; i <= n; ++i )
if( cst[ nod ][ i ] > 0 ) {
viz[ i ] = 1;
cd[ ++dr ] = i;
tat[ i ] = nod;
if( i == n )
return 1;
}
}
return 0;
}
void read() {
int i, x0, y0, flx0;
scanf( "%d %d", &n, &m );
init_cst();
for( i = 0; i < m; ++i ) {
scanf( "%d %d %d", &x0, &y0, &flx0 );
cst[ x0 ][ y0 ] = flx0;
cst[ y0 ][ x0 ] = 0;
}
}
void solve() {
int flx, nod, fmin;
for( flx = 0; bf(); flx += fmin ) {
fmin = INF;
for( nod = n; nod != 1; nod = tat[ nod ] )
fmin = min( fmin, cst[ tat[ nod ] ][ nod ] );
for( nod = n; nod != 1; nod = tat[ nod ] ) {
cst[ tat[ nod ] ][ nod ] -= fmin;
cst[ nod ][ tat[ nod ] ] += fmin;
}
}
printf( "%d", flx );
}
int main() {
freopen( "maxflow.in", "r", stdin );
freopen( "maxflow.out", "w", stdout );
read();
solve();
return 0;
}