Pagini recente » Cod sursa (job #2063432) | Cod sursa (job #1787329) | Cod sursa (job #1380265) | Cod sursa (job #2888916) | Cod sursa (job #1665211)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector <int> v[1001];
int C[1001],t[1001],c[1001][1001],n,m,x,y,i,flow,MIN,cap;
int bf()
{
int prim,ultim;
vector<int>::iterator i;
prim=ultim=1; C[prim]=1; t[1]=-1;
while(prim<=ultim)
{
for(i=v[C[prim]].begin();i<v[C[prim]].end();i++)
if(!t[*i]&&c[C[prim]][*i])
{
C[++ultim]=*i;
t[*i]=C[prim];
}
prim++;
}
return t[n];
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>cap;
v[x].push_back(y);
v[y].push_back(x);
c[x][y]=cap;
}
while(bf())
{
vector<int>::iterator j;
for(j=v[n].begin();j<v[n].end();j++)
{
if(t[*j]&&c[*j][n])
{
MIN=c[*j][n];
for(i=*j;i>1;i=t[i])
if(c[t[i]][i]<MIN) MIN=c[t[i]][i];
flow+=MIN;
for(i=*j;i>1;i=t[i])
{
c[t[i]][i]-=MIN;
c[i][t[i]]+=MIN;
}
cout<<MIN<<" ";
c[*j][n]-=MIN;
}
}
memset(t,0,sizeof(t));
}
fout<<flow;
return 0;
}