Pagini recente » Cod sursa (job #1464378) | Cod sursa (job #326558) | Cod sursa (job #1632772) | Cod sursa (job #3196065) | Cod sursa (job #2661691)
#define fisier "maxflow"
#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int N = 1001, INF = 110000;
int C[N][N], T[N], n;
#include <vector>
std::vector<int> L[N];
#include <bitset>
#include <deque>
int bfs()
{
std::bitset<N> E = 2;
int MIN[N] = {-1, INF};
for (std::deque<int> D = {1}; D.size(); D.pop_front())
for (int back: L[D.front()])
if (not E[back] and C[D.front()][back])
{
D.push_back(back); ///
E[back] = true; ///
MIN[back] = std::min(MIN[D.front()], C[D.front()][back]);
T[back] = D.front();
if (back == n)
return MIN[n];
}
return false;
}
int main()
{
int m, min, 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 (min = bfs())
{
f += min;
for (int i = n; T[i]; i = T[i])
{
C[ T[i] ][i] -= min;
C[i][ T[i] ] += min;
}
}
out << f;
}