Pagini recente » Cod sursa (job #2661080) | Cod sursa (job #2141404) | Autentificare | Cod sursa (job #2683309) | Cod sursa (job #2905629)
#include <bits/stdc++.h>
#define Nmax 1002
#define INF 1e9
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int N, M;
int cap[Nmax][Nmax], flow[Nmax][Nmax], t[Nmax], Min[Nmax];
bool vis[Nmax];
vector<int> G[Nmax];
void makeFlow(int currFlow) {
int v = N;
while (v != 1) {
int u = t[v];
flow[u][v] += currFlow;
flow[v][u] -= currFlow;
v = u;
}
}
int BFS() {
queue<int> Q;
memset(Min, 0, sizeof(Min));
memset(vis, 0, sizeof(vis));
Q.push(1);
vis[1] = 1;
Min[1] = INF;
while (!Q.empty()) {
int u = Q.front();
Q.pop();
for (auto v: G[u])
if (!vis[v] && flow[u][v] < cap[u][v]) {
vis[v] = 1;
Min[v] = min(Min[u], cap[u][v] - flow[u][v]);
t[v] = u;
if (v == N) return Min[N];
Q.push(v);
}
}
return 0;
}
int main()
{
fin >> N >> M;
while (M--) {
int x, y, c;
fin >> x >> y >> c;
G[x].push_back(y);
G[y].push_back(x); /// back-edge
cap[x][y] = c;
}
int ans = 0;
while (1) {
int currFlow = BFS();
if (currFlow == 0) break;
ans += currFlow;
makeFlow(currFlow);
}
fout << ans << '\n';
return 0;
}