Pagini recente » Cod sursa (job #3279219) | Cod sursa (job #64811) | Cod sursa (job #1865199) | Cod sursa (job #2815275) | Cod sursa (job #2660163)
#define fisier "maxflow"
#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int N = 1001;
int C[N][N], F[N][N], T[N];
inline int S(int i, int j)
{return C[i][j] - F[i][j];};
#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 = 1; back <= n; back++)
if (!E[back] && S(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;
}
while (bfs(n))
{
m = S(T[n], n);
for (int i = n; T[i]; i = T[i])
m = std::min(m, S(T[i], i));
f += m;
for (int i = n; T[i]; i = T[i])
{
F[ T[i] ][i] += m;
F[i][ T[i] ] -= m;
}
}
out << f;
}