Pagini recente » Cod sursa (job #2055915) | Clasament viii_sim_2 | Cod sursa (job #1949616) | Cod sursa (job #1237924) | Cod sursa (job #622685)
Cod sursa(job #622685)
# include <fstream>
# include <vector>
# include <cstring>
# define NMAX 1024
# define pb push_back
# define sz size()
# define mp make_pair
# define INF 0x3f3f3f3f
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int C[ NMAX ][ NMAX ];
int F[ NMAX ][ NMAX ];
int TT[ NMAX ];
int N, M;
int cd[ NMAX ];
int viz[ NMAX ];
vector < int > G[ NMAX ];
int BF()
{
int i, j, nod, V;
cd[ 0 ] = 1;
cd[ 1 ] = 1;
memset(viz, 0, sizeof(viz));
viz[ 1 ] = 1;
for ( i = 1 ; i <= cd[ 0 ] ; i++ )
{
nod = cd[ i ];
if ( nod == N )
continue;
for ( j = 0; j < G[ nod ].sz; j++ )
{
V = G[ nod ][ j ];
if ( C[ nod ][ V ] == F[ nod ][ V ] || viz[ V ] )
continue;
viz[ V ] = 1;
cd[ ++cd[ 0 ] ] = V;
TT[ V ] = nod;
}
}
return viz[ N ];
}
int main()
{
//freopen("maxflow.in", "r", stdin);
//freopen("maxflow.out", "w", stdout);
int i, flow, fmin, x, y, z, nod;
//scanf("%d %d ", &N, &M);
f >> N >> M;
for (i = 1; i <= M; i++)
{
//scanf("%d %d %d ", &x, &y, &z);
f >> x >> y >> z;
C[ x ][ y ] += z;
G[ x ].pb( y );
G[ y ].pb( x );
}
//for ( flow = 0; BF();)
flow = 0;
while( BF() )
{
//BF();
//flow = 0;
for (i = 0; i < G[ N ].sz; i++)
{
nod = G[ N ][ i ];
if ( F[ nod ][ N ] == C[ nod ][ N ] || !viz[ nod ] )
continue;
TT[ N ] = nod;
fmin = INF;
for ( nod = N ; nod != 1; nod = TT[ nod ] )
fmin = min(fmin, C[ TT[ nod ] ][ nod ] - F[ TT[ nod ] ][ nod ] );
if ( fmin == 0 )
continue;
for ( nod = N ; nod != 1 ; nod = TT[ nod ] )
{
F[ TT[ nod ] ][ nod ] += fmin;
F[ nod ][ TT[ nod ] ] -= fmin;
}
flow += fmin;
}
}
//printf("%d ", flow);
g << flow;
return 0;
}