Pagini recente » Cod sursa (job #919085) | Cod sursa (job #1885868) | Cod sursa (job #1856466) | Cod sursa (job #2088648) | Cod sursa (job #1897524)
#include<bits/stdc++.h>
#define in f
#define out g
using namespace std;
ifstream f ("maxflow.in");
ofstream g ("maxflow.out");
int const maxsize = 1010;
int n, m, viz[maxsize];
int father[maxsize];
vector<int> v[maxsize];
queue<int> q;
int cp[maxsize][maxsize];
int x, y, z, s, k = 110000;
int bfs () {
q.push(1);
while (!q.empty()) {
int node = q.front();
if (node == n)
return 1;
viz[node]++;
q.pop();
for (int i = 0; i < v[node].size(); i++) {
int ngh = v[node][i];
if (viz[ngh] == 0 && cp[node][ngh] > 0) {
k = min(k, cp[node][ngh]);
father[ngh] = node;
q.push(ngh);
}
}
}
return 0;
}
int main() {
in >> n >> m;
for (int i = 1; i <= m; i++) {
in >> x >> y >> z;
cp[x][y] = z;
v[x].push_back(y);
}
while (bfs() == 1) {
s += k;
int node = n;
while (father[node] != 0) {
cp[father[node]][node] -= k;
node = father[node];
}
for (int i = 1; i <= n; i++) {
viz[i] = 0;
father[i] = 0;
}
k = 110000;
while (!q.empty())
q.pop();
}
out << s;
}