Pagini recente » Cod sursa (job #2637329) | Cod sursa (job #2398779) | Cod sursa (job #2332886) | Cod sursa (job #1543683) | Cod sursa (job #2901663)
#include <bits/stdc++.h>
#define Nmax 1002
#define INF 1e9
#define Mmax 5002
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int N, M;
vector<int> G[Nmax];
int cap[Nmax][Nmax], flow[Nmax][Nmax];
int t[Nmax];
void updateGraph(int newFlow) {
int y = N;
while (y != 1) {
int x = t[y];
flow[x][y] += newFlow;
flow[y][x] -= newFlow;
y = x;
}
}
int BFS() {
queue<int> Q;
bool vis[Nmax];
int Min[Nmax];
memset(vis, false, sizeof(vis));
memset(Min, 0, sizeof(Min));
Q.push(1);
vis[1] = true;
Min[1] = INF;
while (!Q.empty()) {
int x = Q.front();
Q.pop();
for (auto y: G[x])
if (!vis[y] && flow[x][y] < cap[x][y]) {
vis[y] = true;
t[y] = x;
Min[y] = min(Min[x], cap[x][y] - flow[x][y]);
Q.push(y);
if (y == N) break;
}
}
return Min[N];
}
int main()
{
fin >> N >> M;
while (M--) {
int x, y, c;
fin >> x >> y >> c;
cap[x][y] = c;
G[x].push_back(y);
}
int ans = 0;
while (1) {
int newFlow = BFS();
if (newFlow == 0) break;
ans += newFlow;
updateGraph(newFlow);
}
fout << ans << '\n';
return 0;
}