Pagini recente » Cod sursa (job #538743) | Cod sursa (job #839917) | Monitorul de evaluare | Profil MihaelaCismaru | Cod sursa (job #2485850)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int n,m,x,y,z;
int c[1002][1002],a[1002][1002],t[1002];
vector <int >v[1002];
bool bfs()
{
for(int i=1;i<=n;i++)
{
t[i]=-1;
}
t[1]=0;
queue <int> q;
q.push(1);
while(!q.empty())
{
int nod=q.front();
q.pop();
for(auto it:v[nod])
{
if(t[it]==-1 && c[nod][it]!=a[nod][it])
{
t[it]=nod;
if(it==n)return 1;
q.push(it);
}
}
}
return 0;
}
int flow()
{
int sol=0;
while(bfs())
{
for(auto it:v[n])
{
if(t[it]!=-1)
{
int adauga=c[it][n]-a[it][n];
int nod=it,rep=0;
while(nod!=1)
{
rep=t[nod];
adauga=min(adauga,c[rep][nod]-a[rep][nod]);
nod=rep;
}
sol+=adauga;
a[it][n]+=adauga;
a[n][it]-=adauga;
nod=it;
while(nod!=1)
{
rep=t[nod];
a[rep][nod]+=adauga;
a[nod][rep]-=adauga;
nod=rep;
}
}
}
}
return sol;
}
int main()
{
f>>n>>m;
for(int i=1; i<=m; i++)
{
f>>x>>y>>z;
c[x][y]=z;
a[x][y]=a[y][x]=0;
v[x].push_back(y);
v[y].push_back(x);
}
g<<flow()<<'\n';
return 0;
}