Pagini recente » Cod sursa (job #2506754) | Cod sursa (job #2154336) | Cod sursa (job #2442391) | Cod sursa (job #2108958) | Cod sursa (job #2179612)
#include <fstream>
#include <vector>
#include <queue>
#define DIM 1002
using namespace std;
ifstream in ("maxflow.in");
ofstream out("maxflow.out");
int n, m, x, y, Cap[DIM][DIM], Flow[DIM][DIM], t[DIM], flow;
bool viz[DIM];
vector<int> graf[DIM];
queue<int> q;
bool bfs(){
q.push(1);
for(int i = 1; i <= n; ++ i)
viz[i] = 0;
viz[1] = 1;
while(!q.empty()){
int nod = q.front();
q.pop();
for(int i = 0; i < graf[nod].size(); ++ i){
int nodc = graf[nod][i];
if(!viz[nodc] && Cap[nod][nodc] - Flow[nod][nodc] > 0){
viz[nodc] = 1;
q.push(nodc);
t[nodc] = nod;
}
}
}
return viz[n];
}
int main()
{
in>>n>>m;
for(int i = 1; i <= m; ++ i){
in>>x>>y;
graf[x].push_back(y);
graf[y].push_back(x);
in>>Cap[x][y];
}
while(bfs()){
for(int i = 0; i < graf[n].size(); ++ i){
int nod = graf[n][i];
if(Cap[nod][n] - Flow[nod][n] <= 0 || !viz[nod])
continue;
int minim = Cap[nod][n] - Flow[nod][n];
while(nod != 1){
minim = min(minim, Cap[t[nod]][nod] - Flow[t[nod]][nod]);
nod = t[nod];
}
nod = graf[n][i];
Flow[nod][n] += minim;
Flow[n][nod] -= minim;
flow += minim;
while(nod != 1){
Flow[t[nod]][nod] += minim;
Flow[nod][t[nod]] -= minim;
nod = t[nod];
}
}
}
out<<flow;
return 0;
}