Pagini recente » Cod sursa (job #2739918) | Cod sursa (job #2220377) | Cod sursa (job #2874018) | Cod sursa (job #1613931) | Cod sursa (job #1398340)
#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 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;
//if (y!=n)
{
v[y].push_back(x);
a[y][x]=0;
}
}
do
{
for (i=1;i<=n;i++)
tt[i]=0;
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 (tt[*it]==0&&a[nod][*it]>0)
{
tt[*it]=nod;
cd.push(*it);
}
}
}
nod=n;
Min=a[tt[nod]][nod];
while (nod!=1&&tt[nod]!=0)
{
Min=min(Min,a[tt[nod]][nod]);
nod=tt[nod];
}
nod=n;a[nod][tt[nod]]-=Min;
while (nod!=1&&tt[nod]!=0)
{
a[tt[nod]][nod]-=Min;
//if (a[nod][tt[nod]]!=-1)
a[nod][tt[nod]]+=Min;
nod=tt[nod];
}
//if (nod==1)
flux+=Min;
}while (tt[n]!=0);
fout<<flux;
return 0;
}