Pagini recente » Cod sursa (job #2085102) | Cod sursa (job #719807) | Cod sursa (job #605797) | Cod sursa (job #613925) | Cod sursa (job #1394490)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
const int kMaxN = 1005;
const int kInf = 0x3f3f3f3f;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int N, M, cap[kMaxN][kMaxN], padre[kMaxN], maxflow;
vector<int> G[kMaxN];
bool use[kMaxN];
void DFS(int node) {
use[node] = true;
if (node != N)
for (int i : G[node])
if (!use[i] && cap[node][i]) {
padre[i] = node;
DFS(i);
}
}
bool Check() {
memset(use, 0, sizeof use);
DFS(1);
return use[N];
}
int main() {
fin >> N >> M;
while (M--) {
int x, y, c;
fin >> x >> y >> c;
G[x].push_back(y);
G[y].push_back(x);
cap[x][y] = c;
}
while (Check()) {
for (int node : G[N])
if (use[node] && cap[node][N]) {
padre[N] = node;
int flow = kInf;
for (int i = N; i != 1; i = padre[i])
flow = min(flow, cap[padre[i]][i]);
for (int i = N; i != 1; i = padre[i]) {
cap[padre[i]][i] -= flow;
cap[i][padre[i]] += flow;
}
maxflow += flow;
}
}
fout << maxflow << "\n";
return 0;
}