Pagini recente » Cod sursa (job #2294956) | Cod sursa (job #704218) | Cod sursa (job #1277805) | Cod sursa (job #166420) | Cod sursa (job #1399530)
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector<int> v[1001];
queue<int> cd;
int n,m,i,j,a[1001][1001],x,y,c,tt[1001],nod,Min,flux;
int bfs()
{
cd.push(1);
while (cd.empty() == false)
{
nod=cd.front();
cd.pop();
for (vector<int>::iterator it = v[nod].begin(); it != v[nod].end(); it++)
{
if (a[nod][*it]>0&&tt[*it]==0)
{
cd.push(*it);
tt[*it]=nod;
}
}
}
if (tt[n]==0)
return 0;
else
return 1;
}
int main()
{
fin>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
a[i][j]=-1;
for (i=1;i<=m;i++)
{
fin>>x>>y>>c;
v[x].push_back(y);
a[x][y]=c;
v[y].push_back(x);
}
while (bfs())
{
for (vector<int>::iterator it = v[n].begin(); it!= v[n].end(); it++)
{
nod=*it;
if (a[nod][n]>0&&tt[nod])
{
Min=a[nod][n];
while (nod!=1)
{
Min=min(Min,a[tt[nod]][nod]);
nod=tt[nod];
}
nod=*it;
flux+=Min;
a[nod][n]-=Min;
while (nod!=1)
{
a[tt[nod]][nod]-=Min;
a[nod][tt[nod]]+=Min;
}
}
}
for (i=1;i<=n;i++)
tt[i]=0;
}
fout<<flux;
return 0;
}