Pagini recente » Cod sursa (job #2225483) | Cod sursa (job #489847) | Cod sursa (job #888412) | Cod sursa (job #2210116) | Cod sursa (job #2961132)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("muzeu.in");
ofstream fout("muzeu.out");
queue<int> bfs;
vector<int> parent;
vector<vector<int>> lista, flow, cap;
int bottleneck(int i){
int p = parent[i];
if(p == -1) return 111000;
return min(cap[p][i] - flow[p][i], bottleneck(p));
}
void update(int b, int i){
int p = parent[i];
if(p == -1) return;
flow[p][i] += b;
flow[i][p] -= b;
update(b, p);
}
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;
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;
if(y == n) break;
bfs.push(y);
}
}
if(parent[n] != 0){
b = bottleneck(n);
update(b, n);
fill(parent.begin(), parent.end(), 0);
}
else break;
}
int F = 0;
for(int i=1; i<=n; i++)
F += flow[1][i];
fout<<F;
}