Pagini recente » Cod sursa (job #2969770) | Borderou de evaluare (job #1560446) | Cod sursa (job #3350705) | Cod sursa (job #3321176) | Cod sursa (job #3336679)
#include <iostream>
#include <queue>
#include <fstream>
using namespace std;
int n, m;
int cap[1005][1005];
vector<int> adj[1005];
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
void edmonds_karp(int source, int dest){
long long ans = 0;
while(true){
vector<int> dad(n + 1, -1);
queue<int> q;
dad[source] = source;
q.push(source);
while(!q.empty() && dad[dest] == -1){
int x = q.front(); q.pop();
for(int v : adj[x]){
if(dad[v] == -1 && cap[x][v] > 0){
dad[v] = x;
q.push(v);
}
}
}
if(dad[dest] == -1) break;
int minDrum = INT_MAX;
for(int p = dest; p != source; p = dad[p]){
minDrum = min(minDrum, cap[dad[p]][p]);
}
for(int p = dest; p != source; p = dad[p]){
cap[dad[p]][p] -= minDrum;
cap[p][dad[p]] += minDrum;
}
ans += minDrum;
}
fout << ans << "\n";
}
int main(){
int x, y, z;
fin >> n >> m;
for(int i = 0; i < m; i++){
fin >> x >> y >> z;
adj[x].push_back(y);
adj[y].push_back(x);
cap[x][y] = z;
}
edmonds_karp(1, n);
return 0;
}