Pagini recente » Cod sursa (job #1542824) | Cod sursa (job #1237298) | Cod sursa (job #2489029) | Cod sursa (job #839484) | Cod sursa (job #1166570)
#include <fstream>
#include <queue>
#include <vector>
#define oo 0x3f3f3f3f
using namespace std;
int f[1005][1005];
queue <int> q;
int t[1005],n,m;
vector <int> li[1005];
bool used[1005];
bool bfs(int s, int d){
fill(used,used+n+5,0);
fill(t,t+n+5,0);
used[s]=1;
q.push(s);
int i;
while(!q.empty()){
int u=q.front();
q.pop();
for(int k=0;k<li[u].size();k++){
i=li[u][k];
if(used[i]!=1){
if(f[u][i]>0){
q.push(i);
t[i]=u;
used[i]=1;
}
}
}
}
if(t[d]) return 1;
return 0;
}
int flow(int s,int d){
int mi=oo;
int fl=0;
while (bfs(s,d)){
for(int k=0;k<li[n].size();k++){
int j=li[n][k];
if((f[j][d]>0)&&(used[j])){
mi=oo;
if(f[j][d]<mi)mi=f[j][d];
for(int i=j;i>s;i=t[i]){
if(f[t[i]][i]<mi)mi=f[t[i]][i];
}
if(mi==oo)continue;
f[j][d]-=mi;
f[d][j]+=mi;
for(int i=j;i>s;i=t[i]){
f[t[i]][i]-=mi;
f[i][t[i]]+=mi;
}
fl+=mi;
}
}
}
return fl;
}
int main()
{
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int a,b,c;
fin>> n>>m;
for(int i=0;i<m;i++){
fin>>a>>b>>c;
li[a].push_back(b);
li[b].push_back(a);
f[a][b]=c;
}
int re=flow(1,n);
fout<<re;
return 0;
}