Pagini recente » Cod sursa (job #2708635) | Cod sursa (job #820598) | Cod sursa (job #648460) | Cod sursa (job #2139644) | Cod sursa (job #671819)
Cod sursa(job #671819)
#include<fstream>
#include<vector>
#include<queue>
#include<bitset>
#define DIM 1001
#define pb push_back
#define INF 0x3f3f3f3f
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int N, M, flow;
int F[DIM][DIM], C[DIM][DIM], T[DIM];
vector< int > G[DIM];
bitset< DIM > viz;
void Read()
{
int x, y, c, i;
in >> N >> M;
for(i = 1; i <= M; i++)
{
in >> x >> y >> c;
G[x].pb(y);
G[y].pb(x);
C[x][y] = c;
}
}
int BFs()
{
queue< int > Q;
viz.reset();
Q.push(1);
viz.set(1);
while( !Q.empty() )
{
int nod = Q.front();
Q.pop();
for(vector< int > :: iterator it = G[nod].begin(); it != G[nod].end(); ++it )
{
if( F[nod][*it] < C[nod][*it] && !viz[*it] )
{
Q.push(*it);
viz.set(*it);
T[*it] = nod;
}
}
}
return viz[N];
}
void Solve()
{
int nod, fmin;
while( BFs() )
{
fmin = INF;
for(nod = N; nod != 1; nod = T[nod] )
fmin = min(fmin, C[T[nod]][nod] - F[T[nod]][nod]);
for(nod = N; nod != 1; nod = T[nod] )
{
F[T[nod]][nod] += fmin;
F[nod][T[nod]] -= fmin;
}
flow += fmin;
}
}
int main()
{
Read();
Solve();
out << flow;
return 0;
}