Pagini recente » Cod sursa (job #653933) | Cod sursa (job #3120408) | Cod sursa (job #1855236) | Cod sursa (job #1100880) | Cod sursa (job #2697712)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <climits>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int NMAX = 1005;
int cap[NMAX][NMAX];
int p[NMAX];
int n, m, x, y, z;
queue<int>q;
vector<int>G[NMAX];
int s, t;
void read()
{
fin >> n >> m;
s = 1;
t = n;
while (m--)
{
fin >> x >> y >> z;
cap[x][y] = z;
G[x].push_back(y);
G[y].push_back(x);
}
}
int bfs()
{
q.push(s);
while (!q.empty())
{
int u = q.front();
q.pop();
for (int v : G[u])
{
if (!p[v] && cap[u][v] > 0)
{
p[v] = u;
q.push(v);
}
}
}
return p[t];
}
void EdmondKarp()
{
int flux = 0;
while (bfs())
{
for (int v : G[t])
{
int capMin = cap[v][t];
for (int i = v; i != 1; i = p[i])
capMin = min(capMin, cap[p[i]][i]);
for (int i = v; i != 1; i = p[i])
{
cap[p[i]][i] -= capMin;
cap[i][p[i]] += capMin;
}
flux += capMin;
cap[v][t] -= capMin;
cap[t][v] += capMin;
}
for (int i = 0; i <= n; i++)
p[i] = 0;
}
fout << flux << '\n';
}
int main()
{
read();
EdmondKarp();
return 0;
}