Pagini recente » Cod sursa (job #3274350) | Cod sursa (job #3183729) | Cod sursa (job #939134) | Cod sursa (job #2134012) | Cod sursa (job #2961137)
#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;
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 = 111000;
x = n;
while(parent[x] != -1)
b = min(b, cap[parent[x]][x] - flow[parent[x]][x]),
x = parent[x];
x = n;
while(parent[x] != -1)
flow[parent[x]][x] += b,
flow[x][parent[x]] -= b,
x = parent[x];
fill(parent.begin(), parent.end(), 0);
}
else break;
}
int F = 0;
for(int i=1; i<=n; i++)
F += flow[1][i];
fout<<F;
}