Pagini recente » Cod sursa (job #138224) | Cod sursa (job #2951468) | Cod sursa (job #1587316) | Cod sursa (job #269098) | Cod sursa (job #1122058)
#include<fstream>
#include<vector>
#include<list>
#define dmax 1001
#define INF 2147000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
list<int> lista;
list<int>::iterator it;
vector<int> q(dmax,0);
vector< list<int> >l(dmax,lista);
int i,n,m,maxflow,x,y,c,minn;
int d[dmax],viz[dmax],cap[dmax][dmax],flux[dmax][dmax];
int bf()
{
int ls=0,ld=0;
for(i=1;i<=n;++i)
viz[i]=d[i]=0;
for(i=0;i<=1000;++i) q[i]=0;
q[0]=1;
while(ls<=ld)
{
x=q[ls++];
for(it=l[x].begin();it!=l[x].end();++it)
if(!viz[*it] && cap[x][*it]>flux[x][*it])
viz[*it]=1, d[*it]=x, q[++ld]=*it;
}
if(d[n])
return 1;
else
return 0;
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;++i)
fin>>x>>y>>c,
l[x].push_back(y),
cap[x][y]=c;
while(bf())
{
minn=INF;
for(i=n;i!=1;i=d[i])
if((cap[d[i]][i]-flux[d[i]][i])<minn)
minn=cap[d[i]][i]-flux[d[i]][i];
for(i=n;i!=1;i=d[i])
flux[d[i]][i]+=minn;
maxflow+=minn;
}
fout<<maxflow;
return 0;
}