Pagini recente » Cod sursa (job #2359858) | Cod sursa (job #2882044) | Cod sursa (job #1713288) | Cod sursa (job #2254913) | Cod sursa (job #2955031)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
int root, n, m, n1, n2, c, total;
int flux[1000][1000];
ifstream f("maxflow.in");
ofstream g("maxflow.out");
vector<int>tati;
vector<vector<int>>lista;
vector<vector<int>> flux;
vector<bool>label;
bool BFS(int root) {
queue<int>q;
for(int i=1;i<=n;i++)
{
tati[i] = 0;
label[i] = 0;
}
label[root] = 1;
q.push(root);
while (!q.empty()) {
int x = q.front();
q.pop();
for (auto el : lista[x]) {
if (label[el] == 0 && flux[x][el] > 0) {
tati[el] = x;
q.push(el);
if (x == n)
return 1;
label[el] = 1;
}
}
}
return 0;
}
int main() {
f >> n >> m;
label.resize(n + 1);
tati.resize(n + 1);
lista.resize(n + 1);
for (int i = 1; i <= m; i++)
{
f >> n1 >> n2 >> c;
lista[n1].push_back(n2);
lista[n2].push_back(n1);
flux[n1][n2] = c;
}
while (BFS(1)) {
for (auto el : lista[n])
{
if (!label[el])
continue;
int min1 = 10000000;
int v = n;
while (v != 1)
{
min1 = min(min1, flux[tati[v]][v]);
v = tati[v];
}
v = n;
while (v != 1) {
flux[tati[v]][v] -= min1;
flux[v][tati[v]] += min1;
v = tati[v];
}
total = total + min1;
}
}
g << total;
}