Pagini recente » Cod sursa (job #2763155) | Cod sursa (job #1195538) | Cod sursa (job #1127215) | Cod sursa (job #646557) | Cod sursa (job #2371529)
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> graph, capacity, flow;
vector<int> parent;
int n, m;
void read(){
ifstream fin("maxflow.in");
fin>>n>>m;
graph.resize(n+1, vector<int>());
capacity.resize(n+1, vector<int>(n+1, 0));
flow.resize(n+1, vector<int>(n+1, 0));
parent.resize(n+1);
int x, y, c;
for(int i=1; i<=m; i++){
fin>>x>>y>>c;
graph.at(x).push_back(y);
graph.at(y).push_back(x);
capacity.at(x).at(y) = c;
}
}
bool bfs(){
vector<bool> visited = vector<bool>(n+1, false);
queue<int> Queue;
Queue.push(1);
while(!Queue.empty()){
int node = Queue.front();
visited.at(node) = true;
Queue.pop();
for(auto& neighbour:graph.at(node)){
if(capacity.at(node).at(neighbour)==flow.at(node).at(neighbour)||visited.at(neighbour)) continue;
parent.at(neighbour) = node;
if(neighbour == n) return true;
Queue.push(neighbour);
}
}
return false;
}
int main()
{
read();
int maxFlow = 0, currentFlow;
while(bfs()){
currentFlow = INT_MAX;
for(int i=n; i!=1; i = parent.at(i))
currentFlow = min(currentFlow, capacity.at(parent.at(i)).at(i) - flow.at(parent.at(i)).at(i));
for(int i=n; i!=1; i=parent.at(i)){
flow.at(parent.at(i)).at(i) += currentFlow;
flow.at(i).at(parent.at(i)) -= currentFlow;
}
maxFlow += currentFlow;
}
ofstream fout("maxflow.out");
fout<<maxFlow;
}