Pagini recente » Cod sursa (job #543721) | Istoria paginii runda/oji_10_2024 | Profil Dobricean_Ioan | Atasamentele paginii Clasament abcdefghijklmnopqrstuvwxyz | Cod sursa (job #3032956)
#include <bits/stdc++.h>
const int NMAX = 5e5 + 5;
struct flowEdge {
int u, v, cap;
};
int n, m, f[NMAX], t[NMAX];
std :: vector < flowEdge > edges;
std :: vector < int > G[NMAX];
std :: ifstream fin("maxflow.in");
std :: ofstream fout("maxflow.out");
void DFS(int node) {
f[node] = true;
for (int i = 0; i < G[node].size(); ++ i) {
int u = G[node][i];
if (f[edges[u].v] == false && edges[u].cap > 0) {
t[edges[u].v] = u;
DFS(edges[u].v);
}
}
}
int main() {
fin >> n >> m;
for (int i = 0, u, v, cap; i < m; ++ i) {
fin >> u >> v >> cap;
edges.push_back({u, v, cap});
G[u].push_back(edges.size() - 1);
edges.push_back({v, u, 0});
G[v].push_back(edges.size() - 1);
}
int flow = 0;
while (1) {
for (int i = 0; i <= n; ++ i) {
t[i] = -1;
f[i] = false;
}
DFS(1);
if (t[n] == -1)
break;
int x = n;
while (t[x] != -1) {
edges[t[x]].cap --;
edges[t[x] ^ 1].cap ++;
x = edges[t[x]].u;
}
++ flow;
}
fout << flow;
return 0;
}