Pagini recente » Cod sursa (job #3183537) | Cod sursa (job #3147772) | Cod sursa (job #2032687) | Cod sursa (job #2466382) | Cod sursa (job #2603906)
#define MAX_N 1000
#define INF 0x3f3f3f3f
#include <fstream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n, m, flow, step = 1;
vector<pair<int, int>> G[MAX_N + 1];
bool Dfs(int node, int& mi);
int main()
{
fin >> n >> m;
for (int i = 0, x, y, c; i < m; ++i)
{
fin >> x >> y >> c;
G[x].emplace_back(y, c);
}
int mi = INF;
while (Dfs(1, mi))
{
flow += mi;
mi = INF;
++step;
}
fout << flow;
fin.close();
fout.close();
return 0;
}
int V[MAX_N + 1];
bool Dfs(int node, int& mi)
{
V[node] = step;
if (node == n)
{
return true;
}
for (auto& neigh : G[node])
{
if ((V[neigh.first] != step) && (neigh.second != 0))
{
int min_aux = min(mi, neigh.second);
if (Dfs(neigh.first, min_aux))
{
mi = min(mi, min_aux);
neigh.second -= mi;
return true;
}
}
}
return false;
}