Pagini recente » Cod sursa (job #1535002) | Cod sursa (job #2844935) | Cod sursa (job #1884006) | Cod sursa (job #45724) | Cod sursa (job #1971175)
#include <fstream>
#include <queue>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
#define Max 1001
#define inf 1e9
int n, m;
int graph[Max][Max];
int rgraph[Max][Max];
int parent[Max];
bool bfs(int s, int t){
bool visited[Max];
for(int i = 0; i < n; i++ )
visited[i] = false;
queue <int> q;
q.push(s);
visited[s] = true;
parent[s] = -1;
while (!q.empty()){
int u = q.front();
q.pop();
for (int v = 0; v < n; v++){
if (visited[v] == false && rgraph[u][v] > 0){
q.push(v);
parent[v] = u;
visited[v] = true;
}
}
}
return (visited[t] == true);
}
int fordFulkerson(int s, int t)
{
int max_flow, u, v;
max_flow = 0;
while (bfs(s, t)){
int path_flow = inf;
for (v = t; v != s; v = parent[v]){
u = parent[v];
path_flow = min(path_flow, rgraph[u][v]);
}
for (v = t; v != s; v = parent[v]){
u = parent[v];
rgraph[u][v] -= path_flow;
rgraph[v][u] += path_flow;
}
max_flow += path_flow;
}
return max_flow;
}
int main()
{
int x, y;
f >> n >> m;
for(int i = 0; i < m; i++){
f >> x >> y;
x--;y--;
f >> graph[x][y];
rgraph[x][y] = graph[x][y];
}
g << fordFulkerson(0,n-1);
return 0;
}