Pagini recente » Cod sursa (job #1079492) | Cod sursa (job #1143541) | Cod sursa (job #79706) | Cod sursa (job #672730) | Cod sursa (job #2421012)
#include <bits/stdc++.h>
using namespace std;
const int DIM = 1005;
vector<int> edg[DIM];
int cap[DIM][DIM], flo[DIM][DIM], rem[DIM], dis[DIM], que[DIM];
bool bfs(int src, int dst) {
memset(dis, 0, sizeof dis);
memset(rem, 0, sizeof rem);
dis[dst] = 1; que[1] = dst;
for (int st = 1, en = 1; st <= en; ++st) {
int y = que[st];
for (int x : edg[y]) {
if (flo[x][y] < cap[x][y] and !dis[x]) {
dis[x] = dis[y] + 1; que[++en] = x;
if (x == src) {
return true; } } } }
return false; }
int dfs(int x, int dst, int f) {
if (x == dst) {
return f; }
else {
for (; rem[x] < edg[x].size(); ++rem[x]) {
int y = edg[x][rem[x]];
if (dis[y] == dis[x] - 1 and flo[x][y] < cap[x][y]) {
int ff = dfs(y, dst, min(f, cap[x][y] - flo[x][y]));
if (ff) {
flo[x][y] += ff; flo[y][x] -= ff;
return ff; } } }
return 0; } }
int main(void) {
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
int n, m; cin >> n >> m;
for (int i = 1; i <= m; ++i) {
int x, y, c; cin >> x >> y >> c;
edg[x].push_back(y);
edg[y].push_back(x);
cap[x][y] = c; }
int ans = 0;
while (bfs(1, n)) {
int aux;
while (aux = dfs(1, n, 110000)) {
ans += aux; } }
cout << ans;
return 0; }