Pagini recente » Cod sursa (job #1592906) | Cod sursa (job #2631724) | Arhiva de probleme | Cod sursa (job #956589) | Cod sursa (job #1879656)
#include<iostream>
#include<fstream>
#include<bitset>
#include<vector>
#include<queue>
#define inf 1999999999
#define DN 1010
using namespace std;
fstream fin("maxflow.in",ios::in),fout("maxflow.out",ios::out);
vector<int> v[DN];
queue<int> q;
int n,m,cst[DN][DN],t[DN],ap[DN],start,stop,total;
bool bfs()
{
int x,i;
for(i=0;i<=n;i++) ap[i]=0;
q.push(1);
ap[1]=1;
while(q.empty()==0)
{
x=q.front(); q.pop();
if(x==n) continue;
for(const int& f:v[x])
{
if(cst[x][f]>0 && ap[f]==0)
{
ap[f]=1;t[f]=x;
q.push(f);
}
}
}
return ap[n];
}
void flux()
{
int aux,minim;
while(bfs())
{
for(const int& f:v[n])
{
if(ap[f]==1 && cst[f][n]>0)
{
aux=n;
t[n]=f;
minim=inf;
while(aux!=1)
{
minim=min(minim,cst[t[aux]][aux]);
aux=t[aux];
}
aux=n;
while(aux!=1)
{
//cout<<aux<<",";
cst[t[aux]][aux]-=minim;
cst[aux][t[aux]]+=minim;
aux=t[aux];
}
total+=minim;
//cout<<"->"<<minim<<"\n";
}
}
}
}
int main()
{
int i,a,b,c;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>a>>b>>c;
v[a].push_back(b);
v[b].push_back(a);
cst[a][b]=c;
}
flux();
fout<<total;
}