Pagini recente » Cod sursa (job #2052043) | Cod sursa (job #2264064) | Cod sursa (job #279740) | Cod sursa (job #1861282) | Cod sursa (job #2660168)
#define fisier "maxflow"
#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int N = 1001;
int C[N][N], T[N];
#include <vector>
std::vector<int> L[N];
#include <deque>
bool bfs(const int n)
{
bool E[N] = {false, true};
for (std::deque<int> deq = {1}; deq.size(); deq.pop_front())
for (int back: L[deq.front()])
if (!E[back] && C[deq.front()][back])
{
E[back] = true;
deq.push_back(back);
T[back] = deq.front();
if (back == n)
return true;
}
return false;
}
int main()
{
int n, m, f = 0;
in >> n >> m;
while (m--)
{
int a, b, c;
in >> a >> b >> c;
C[a][b] = c;
L[a].push_back(b);
L[b].push_back(a);
}
while (bfs(n))
{
m = C[ T[n] ][n];
for (int i = n; T[i]; i = T[i])
m = std::min(m, C[ T[i] ][i]);
f += m;
for (int i = n; T[i]; i = T[i])
{
C[ T[i] ][i] -= m;
C[i][ T[i] ] += m;
}
}
out << f;
}