Pagini recente » Cod sursa (job #1970190) | Cod sursa (job #2024906) | Istoria paginii utilizator/szaszgeri94 | Cod sursa (job #1344961) | Cod sursa (job #1970160)
#include <bits/stdc++.h>
using namespace std;
ifstream w("maxflow.in");
ofstream g("maxflow.out");
const int NMax = 1003;
const int INF = 0x3f3f3f3f;
int n,m,e,x,y,fm,F;
bool viz[NMax];
int tata[NMax];
int c[NMax][NMax],f[NMax][NMax];
vector<int> G[NMax];
queue<int> q;
int bfs(){
memset(viz,0,sizeof(viz));
viz[1] = 1;
q.push(1);
while(!q.empty()){
int nod = q.front();
q.pop();
if(nod == n)
continue;
for(int i = 0; i < G[nod].size(); ++i){
if(!viz[G[nod][i]] && c[nod][G[nod][i]] != f[nod][G[nod][i]]){
viz[G[nod][i]] = 1;
tata[G[nod][i]] = nod;
q.push(G[nod][i]);
}
}
}
return viz[n];
}
int main(){
w >> n >> m;
for(int i = 1; i <= m; ++i){
w >> x >> y >> e;
c[x][y] = e;
G[x].push_back(y);
G[y].push_back(x);
}
while(bfs()){
for(int i = 0; i < G[n].size(); ++i){
if(!viz[G[n][i]] || c[G[n][i]][n] == f[G[n][i]][n])
continue;
tata[n] = G[n][i];
fm = INF;
for(int nod = n; nod != 1; nod = tata[nod]){
fm = min(fm,c[tata[nod]][nod] - f[tata[nod]][nod]);
}
for(int nod = n; nod != 1; nod = tata[nod]){
f[tata[nod]][nod] += fm;
f[nod][tata[nod]] -= fm;
}
F += fm;
}
}
g << F << '\n';
}