Pagini recente » Cod sursa (job #99922) | Cod sursa (job #2408364) | Cod sursa (job #2662532) | Cod sursa (job #106559) | Cod sursa (job #629808)
Cod sursa(job #629808)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int maxN = 1010;
const int inf = 0x3f3f3f3f;
int N, M, maxflow;
int up[maxN], flow[maxN];
int C[maxN][maxN];
vector <int> G[maxN];
bool ok;
inline void init() {
memset(up, -1, sizeof(up));
memset(flow, 0, sizeof(flow));
flow[1] = inf;
}
inline int bfs() {
int Q[maxN], p, u, nod, fiu, i;
p = u = 1;
Q[1] = 1;
while (p <= u) {
nod = Q[p];
for (i = 0; i < G[nod].size(); i++) {
fiu = G[nod][i];
if (flow[fiu] == 0) {
flow[fiu] = min(C[nod][fiu], flow[nod]);
up[fiu] = nod;
Q[++u] = fiu;
}
}
++p;
}
if (flow[N] == 0) {
ok = 0;
return 0;
}
ok = 1;
int flux = flow[N];
for (i = N; i != 1; i = up[i]) {
C[i][up[i]] += flux;
C[up[i]][i] -= flux;
}
return flux;
}
int main() {
int i, a, b, c;
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
scanf("%d%d", &N, &M);
for (i = 1; i <= M; i++) {
scanf("%d%d%d", &a, &b, &c);
G[a].push_back(b);
G[b].push_back(a);
C[a][b] = c;
C[b][a] = 0;
}
ok = 1;
while (ok) {
init();
ok = 0;
maxflow += bfs();
}
printf("%d\n", maxflow);
return 0;
}