Pagini recente » Cod sursa (job #1759714) | Cod sursa (job #1278087) | Cod sursa (job #1623583) | Cod sursa (job #1925861) | Cod sursa (job #1897543)
#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 const INF = 20000000;
int n, m, viz[maxsize];
int father[maxsize];
vector<int> v[maxsize];
int cp[maxsize][maxsize];
int x, y, z, k = INF;
long long s;
int bfs () {
queue<int> q;
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;
k = INF;
}
out << s;
}