Pagini recente » Cod sursa (job #2389791) | Cod sursa (job #1352284) | Cod sursa (job #2634830) | Cod sursa (job #2316334) | Cod sursa (job #2961179)
#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, flow, cap;
int main(){
int n, m, x, y, z;
fin>>n>>m;
lista.resize(n+1);
flow.resize(n+1);
cap.resize(n+1);
for(int i=1;i<=n;i++) flow[i].resize(n+1), 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 && flow[x][y] < cap[x][y]) {
parent[y] = x;
bfs.push(y);
}
}
p = parent[n];
if(p != 0) {
b = 111000;
x = n;
while (p != -1) {
b = min(b, cap[p][x] - flow[p][x]);
x = p;
p = parent[p];
}
F += b;
x = n;
p = parent[x];
while (p != -1){
flow[p][x] += b;
flow[x][p] -= b;
x = p;
p = parent[p];
}
fill(parent.begin(), parent.end(), 0);
}
else break;
}
fout<<F;
}