Pagini recente » Cod sursa (job #1661761) | Cod sursa (job #2310708) | Cod sursa (job #1103412) | Cod sursa (job #783922) | Cod sursa (job #475877)
Cod sursa(job #475877)
#include<fstream.h>
#define NMAX 1005
#define inf 100000
#include<queue>
using namespace std;
long t[NMAX],c[NMAX][NMAX],f[NMAX][NMAX],flux,s,d,m,n;
queue<long> q;
void cit()
{ifstream fin("maxflow.in");
fin>>n>>m;
long i,x,y,ct;
for(i=1;i<=m;++i)
{fin>>x>>y>>ct;
c[x][y]=ct;
}
s=1;
d=n;
fin.close();
}
long bfs()
{long i,k;
for(i=1;i<=n;++i)
t[i]=0;
q.push(s);
t[s]=n+1;
while(!q.empty())
{ k=q.front();
for(i=1;i<=n;++i)
if(f[k][i]<c[k][i]&&t[i]==0)
{t[i]=k;
q.push(i);
}
q.pop();
}
return t[d];
}
void maxflow()
{long i,j,r;
for(;bfs();)
{for(i=1;i<=n;++i)
if(c[i][d]>f[i][d]&&t[i])
{r=inf;
t[d]=i;
for(j=d;j!=s;j=t[j])
if(c[t[j]][j]-f[t[j]][j]<r)
r=c[t[j]][j]-f[t[j]][j];
for(j=d;j!=s;j=t[j])
{f[t[j]][j]+=r;f[j][t[j]]-=r;}
flux+=r;
}
}
}
void afis()
{ofstream fout("maxflow.out");
fout<<flux<<'\n';
fout.close();
}
int main()
{cit();
maxflow();
afis();
return 0;
}