Pagini recente » Cod sursa (job #3310651) | Cod sursa (job #1656358) | Cod sursa (job #1144703) | Cod sursa (job #3308582) | Cod sursa (job #3336820)
#include <bits/stdc++.h>
using namespace std;
const int N = 1001;
int n, m, capacitate[N][N], parinte[N];
bool viz[N];
vector<int> adj[N];
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int bfs(int s, int t)
{
queue<pair<int, int>> q;
q.push({s, INT_MAX});
viz[s] = true;
while (!q.empty())
{
auto [u, f] = q.front();
q.pop();
for (auto v : adj[u])
{
if (!viz[v] && capacitate[u][v] > 0)
{
viz[v] = true;
parinte[v] = u;
int g = min(f, capacitate[u][v]);
if (v == t)
{
int nod = v;
while (nod != s)
{
int p = parinte[nod];
capacitate[p][nod] -= g;
capacitate[nod][p] += g;
nod = p;
}
return g;
}
q.push({v, g});
}
}
}
return 0;
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; ++i)
{
int u, v, c;
fin >> u >> v >> c;
adj[u].push_back(v);
adj[v].push_back(u);
capacitate[u][v] += c;
}
int fluxmax = 0;
while (true)
{
int f = bfs(1, n);
if (f == 0)
{
break;
}
fluxmax += f;
for (int i = 1; i <= n; ++i)
{
viz[i] = false;
}
}
fout << fluxmax << '\n';
return 0;
}