Pagini recente » Cod sursa (job #812459) | Cod sursa (job #2180273) | Cod sursa (job #104737) | Cod sursa (job #3171712) | Cod sursa (job #2961240)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
queue<int> bfs;
vector<int> parent;
vector<vector<int>> lista, cap;
int main(){
int n, m, x, y, z;
fin>>n>>m;
lista.resize(n+1);
cap.resize(n+1);
for(int i=1;i<=n;i++) cap[i].resize(n+1);
for(int i=1; i<=m; i++){
fin>>x>>y>>z;
lista[x].push_back(y);
lista[y].push_back(x);
cap[x][y] = z;
}
parent.resize(n+1);
int b, p, F=0;
while(true){
bfs.push(1);
parent[1] = -1;
while(!bfs.empty()){
x = bfs.front();
bfs.pop();
for(auto y: lista[x])
if(parent[y] == 0 && cap[x][y]) {
parent[y] = x;
if(y == n) break;
bfs.push(y);
}
}
p = parent[n];
if(p != 0) {
b = 111000;
x = n;
while (p != -1) {
b = min(b, cap[p][x]);
x = p;
p = parent[p];
}
F += b;
x = n;
p = parent[x];
while (p != -1){
cap[p][x] -= b;
cap[x][p] += b;
x = p;
p = parent[p];
}
fill(parent.begin(), parent.end(), 0);
}
else break;
}
fout<<F;
}