Pagini recente » Cod sursa (job #1118460) | Cod sursa (job #1296667) | Cod sursa (job #2417488) | Cod sursa (job #1119951) | Cod sursa (job #1510918)
#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <cstring>
#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;
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) {
i = n;
f = 1000000000;
while (i != 1) {
f = min(f, C[Prev[i]][i] - F[Prev[i]][i]);
i = Prev[i];
}
i = n;
while (i != 1) {
F[Prev[i]][i] += f;
F[i][Prev[i]] -= f;
i = Prev[i];
}
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();
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;
if (x == n)
return 1;
}
}
}
return 0;
}