Pagini recente » Cod sursa (job #44125) | Cod sursa (job #2441942) | Cod sursa (job #1635039) | Cod sursa (job #446038) | Cod sursa (job #2467370)
#include <fstream>
#include <vector>
#include <deque>
#define DIM 1010
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout("maxflow.out");
int n,m,i,x,y,z,flux,node,minim,C[DIM][DIM],ok[DIM],T[DIM],F[DIM][DIM];
vector< int > L[DIM];
deque< int > q;
int bfs(){
int found=0;
int aux;
ok[1]=1;
for (i=2;i<=n;i++)
ok[i]=0;
q.push_back(1);
while (!q.empty()){
node=q.front();
for (i=0;i<L[node].size();i++){
aux=L[node][i];
if (!ok[aux] && C[node][aux] > F[node][aux]){
ok[aux]=1;
q.push_back(aux);
T[aux]=node;
if (aux==n)
found=1;
}
}
q.pop_front();
}
return found;
}
int main(){
fin>>n>>m;
for (i=1;i<=m;i++){
fin>>x>>y>>z;
L[x].push_back(y);
L[y].push_back(x);
C[x][y]=z;
}
while (bfs())
for (i=0;i<L[n].size();i++){
x=L[n][i];
if (C[x][n] > F[x][n] && ok[x]){
minim=C[x][n]-F[x][n];
y=x;
while (T[y]){
minim=min(minim,C[T[y]][y]-F[T[y]][y]);
y=T[y];
}
flux+=minim;
F[x][n]+=minim;
F[n][x]-=minim;
y=x;
while (T[y]){
F[T[y]][y]+=minim;
F[y][T[y]]-=minim;
y=T[y];
}
}
}
fout<<flux;
fin.close();
fout.close();
return 0;
}