Pagini recente » Cod sursa (job #1096533) | Cod sursa (job #2537588)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream intrare("maxflow.in");
ofstream iesire("maxflow.out");
const int NMAX=1005;
int graf[NMAX][NMAX];
int q[NMAX];
int n,m,i,j;
int parent[NMAX];
bool vizitat[NMAX];
int k=1;
bool BFS(){
queue < int > q;
q.push(1);
for(int i=1;i<=n;i++)
vizitat[i]=0;
vizitat[1]=1;
parent[1]=-1;
while(!q.empty()){
int nod=q.front();
q.pop();
for(int i=1;i<=n;i++)
if(graf[nod][i]>0 && !vizitat[i]){
vizitat[i]=1;
q.push(i);
parent[i]=nod;
}
}
return vizitat[n];
}
int main()
{
intrare>>n>>m;
for(i=1;i<=m;i++){
int x,y,z;
intrare>>x>>y>>z;
graf[x][y]=z;
}
int sol=0;
while(BFS()){
int minim=(1<<28);
for(int i=n;i!=1;i=parent[i])
minim=min(minim,graf[parent[i]][i]);
sol+=minim;
for(int i=n;i!=1;i=parent[i]){
graf[parent[i]][i]-=minim;
graf[i][parent[i]]+=minim;
}
}
iesire<<sol;
return 0;
}