Pagini recente » Cod sursa (job #1826975) | Cod sursa (job #1546647) | Cod sursa (job #2204913) | Cod sursa (job #2690894) | Cod sursa (job #2669632)
#include <fstream>
#define fisier "maxflow"
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int N = 1001;
int C[N][N], T[N], n;
#include <vector>
std::vector<int> L[N];
#include <bitset>
std::bitset<N> E;
#include <deque>
bool bfs()
{
E = 2;
for (std::deque<int> Q = {1}; Q.size(); Q.pop_front())
for (int back: L[Q.front()])
if (not E[back] and C[Q.front()][back])
{
E[back] = true;
Q.push_back(back);
T[back] = Q.front();
if (back == n)
return true;
}
return false;
}
int main()
{
int 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())
for (int t: L[n])
{
T[n] = t;
int min = C[t][n];
for (int i = t; T[i]; i = T[i])
min = std::min(min, C[ T[i] ][i]);
f += min;
for (int i = n; T[i]; i = T[i])
{
C[ T[i] ][i] -= min;
C[i][ T[i] ] += min;
}
}
out << f;
}