Pagini recente » Cod sursa (job #2937414) | Cod sursa (job #2127169) | Cod sursa (job #1892349) | Cod sursa (job #1146164) | Cod sursa (job #1512112)
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <cstring>
#include <cstdio>
#include <map>
#define MOD 1000000007
#define INF_MIN -2147483647
#define ll long long
#define NMAX 1005
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int C[NMAX][NMAX], F[NMAX][NMAX];
int Prev[NMAX];
bool viz[NMAX];
vector<int> v[NMAX];
int n;
int BFS();
int main() {
int m, i, j, x, y, c, flux, f, p, nod;
fin >> n >> m;
for (i = 0; i < m; ++i) {
fin >> x >> y >> c;
C[x][y] = c;
v[x].push_back(y);
v[y].push_back(x);
}
flux = 0;
while (BFS() == 1) {
for (i = 0; i < v[n].size(); ++i) {
nod = v[n][i];
if (F[nod][n] < C[nod][n] && viz[nod]) {
Prev[n] = nod;
p = n;
f = 1000000000;
while (p != 1) {
f = min(f, C[Prev[p]][p] - F[Prev[p]][p]);
p = Prev[p];
}
if (f>0) {
p = n;
while (p != 1) {
F[Prev[p]][p] += f;
F[p][Prev[p]] -= f;
p = Prev[p];
}
}
flux += f;
}
}
}
fout << flux;
return 0;
}
int BFS() {
int i, j, nod, x;
queue<int> Q;
Q.push(1);
memset(viz, false, sizeof(viz));
while (!Q.empty()) {
nod = Q.front();
Q.pop();
if (nod != n) {
for (i = 0; i < v[nod].size(); ++i) {
x = v[nod][i];
if (viz[x] == false && C[nod][x] != F[nod][x]) {
viz[x] = true;
Q.push(x);
Prev[x] = nod;
}
}
}
}
return viz[n];
}