Pagini recente » Cod sursa (job #1088444) | Cod sursa (job #234268) | Cod sursa (job #1125127) | Cod sursa (job #804256) | Cod sursa (job #1042367)
#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctype.h>
#include <cstring>
#include <string>
#include <ctime>
#include <cassert>
#include <utility>
using namespace std;
#define INF 1000000000
#define MAXN 1005
int N, M, x, y, z, ans;
vector<int> A[MAXN];
int cap[MAXN][MAXN];
bool v[MAXN];
int dfs(int node, int c) {
v[node] = true;
if(node == N) {
ans += c;
return c;
}
int x = 0;
for(vector<int> :: iterator it = A[node].begin(); it != A[node].end() && x == 0; it++) {
if(!v[*it] && cap[node][*it] > 0 && (x = dfs(*it, min(c, cap[node][*it])))) {
cap[node][*it] -= x;
cap[*it][node] += x;
}
}
return x;
}
int main() {
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out","w", stdout);
scanf("%d %d", &N, &M);
for(int i = 0; i < M; i++) {
scanf("%d %d %d", &x, &y, &z);
A[x].push_back(y);
A[y].push_back(x);
cap[x][y] += z;
}
ans = 0;
while(dfs(1, INF)) {
memset(v, false, sizeof(v));
}
printf("%d\n", ans);
return 0;
}