Pagini recente » Cod sursa (job #1913105) | Cod sursa (job #1555996) | Cod sursa (job #495240) | Cod sursa (job #747156) | Cod sursa (job #3136882)
#include <fstream>
#include <queue>
#define NMAX 1000
#define MMAX 5000
#define INF 2000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n, m;
int g[NMAX+1][NMAX+1];
bool viz[NMAX+1];
bool bfs(int s, int d, int parinte[]){
for(int i = 1; i <= n; i++)
viz[i] = false;
queue <int> q;
q.push(s);
while(!q.empty()){
int x = q.front();
q.pop();
for(int i = 1; i <= n; i++){
if(g[x][i] != 0 && viz[i] == false){
parinte[i] = x;
viz[i] = true;
q.push(i);
if(i == d) return true;
}
}
}
return false;
}
int edmondsKarp(int s, int d){
int parinte[NMAX+1];
int flux_maxim = 0;
while(bfs(s, d, parinte)){
int flux_curent = INF;
for(int u = d; u != s; u = parinte[u]){
int v = parinte[u];
flux_curent = min(flux_curent,g[v][u]);
}
for(int u = d; u != s; u = parinte[u]){
int v = parinte[u];
g[v][u] = g[v][u] - flux_curent;
g[u][v] = g[u][v] + flux_curent;
}
flux_maxim = flux_maxim + flux_curent;
}
return flux_maxim;
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= m; i++){
int x, y, capacitate;
fin >> x >> y >> capacitate;
g[x][y] = capacitate;
}
fout << edmondsKarp(1, n);
return 0;
}