Pagini recente » Cod sursa (job #2304420) | Cod sursa (job #6207) | Cod sursa (job #3251129) | Cod sursa (job #3176929) | Cod sursa (job #3227090)
#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
std::ifstream fin("maxflow.in");
std::ofstream fout("maxflow.out");
int gs, edg;
std::vector<std::vector<int>> adj_list;
int cap[1001][1001];
int edmonds_karp() {
int ret = 0;
while (1) {
std::queue<int> q;
std::vector<int> last(gs+1,0);
std::vector<int> min(gs+1,0x3f3f3f3f);
std::vector<bool> vis(gs+1,0);
q.emplace(1);
vis[1] = 1;
while (!q.empty()) {
int k = q.front();
q.pop();
for (const auto& i : adj_list[k]) {
if (!vis[i]&&cap[k][i]>0) {
vis[i] = 1;
last[i] = k;
min[i] = std::min(min[k],cap[k][i]);
q.emplace(i);
}
}
}
if (!vis[gs]) {
break;
}
int add = min[gs];
ret += add;
int k = gs;
while (last[k]) {
cap[last[k]][k] -= add;
cap[k][last[k]] += add;
k = last[k];
}
}
return ret;
}
int main() {
fin >> gs >> edg;
adj_list.resize(gs+1);
for (int i = 0, a, b, c; i < edg; i++) {
fin >> a >> b >> c;
adj_list[a].emplace_back(b);
adj_list[b].emplace_back(a);
cap[a][b] = c;
}
fout << edmonds_karp() << "\n";
}