Pagini recente » Cod sursa (job #3293233) | Cod sursa (job #3222850) | Cod sursa (job #2874159) | Cod sursa (job #3291948) | Cod sursa (job #1462619)
#include<bits/stdc++.h>
using namespace std;
int n;
queue<int> q;
int viz[1005], flux[1001][1001], cap[1001][1001], tata[1005];
vector<int> v[1005];
int bf() {
for(int i = 0; i < n; ++i)
viz[i] = 0;
q.push(0);
viz[0] = 1;
while(!q.empty()){
int x = q.front();
q.pop();
if(x != n - 1) {
for(int i = 0; i < v[x].size(); ++i) {
if(viz[v[x][i]] == 0 && flux[x][v[x][i]] != cap[x][v[x][i]]) {
viz[v[x][i]] = 1;
q.push(v[x][i]);
tata[v[x][i]] = x;
}
}
}
}
return viz[n - 1];
}
int main()
{
int m, a, b, c;
FILE *fin = fopen("maxflow.in", "r");
FILE *fout = fopen("maxflow.out", "w");
fscanf(fin, "%d %d", &n, &m);
for(int i = 0; i < m; ++i) {
fscanf(fin, "%d %d %d", &a, &b, &c);
--a; --b;
v[a].push_back(b);
v[b].push_back(a);
cap[a][b] = c;
cap[b][a] = 0;
}
int flow = 0;
while(bf()) {
for(int i = 0; i < v[n - 1].size(); ++i) {
if(viz[v[n - 1][i]] == 1 && flux[v[n - 1][i]][n - 1] != cap[v[n - 1][i]][n - 1]) {
tata[n - 1] = v[n - 1][i];
int minim = 200000;
for(int j = n - 1; j != 0 ; j = tata[j]) {
if(minim > cap[tata[j]][j] - flux[tata[j]][j])
minim = cap[tata[j]][j] - flux[tata[j]][j];
}
for(int j = n - 1; j != 0 ; j = tata[j]) {
flux[tata[j]][j] += minim;
flux[j][tata[j]] -= minim;
}
flow += minim;
}
}
}
fprintf(fout, "%d", flow);
}