Pagini recente » Cod sursa (job #2678785) | Cod sursa (job #2971261) | Cod sursa (job #3185106) | Cod sursa (job #339773) | Cod sursa (job #918962)
Cod sursa(job #918962)
#include<fstream>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int maxn=1005;
int n,m,p,u,nrd=1,flux;
int v[maxn],t[maxn],cc[maxn];
int c[maxn][maxn],f[maxn][maxn];
void cit()
{
int i,x,y,cost;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>cost;
c[x][y]=cost;
}
}
int drum()
{
int i,nod;
p=u=1; cc[1]=1; v[1]=nrd; t[1]=0;
while(p<=u)
{
nod=cc[p];
if(nod==n) {p++;continue;}
for(i=1;i<=n;i++)
if(f[nod][i]<c[nod][i] && v[i]!=nrd)
{
u++;
cc[u]=i;
t[i]=nod;
v[i]=nrd;
}
p++;
}
return v[n];
}
void flux_max()
{
int i,k,min;
while(drum()==nrd)
{
for(k=1;k<=n;k++)
if(f[k][n]<c[k][n] && v[k]==nrd)
{
t[n]=k;
min=999999;
for(i=n;t[i]!=0;i=t[i])
if(min>c[t[i]][i]-f[t[i]][i])
min=c[t[i]][i]-f[t[i]][i];
for(i=n;t[i]!=0;i=t[i])
{
f[t[i]][i]+=min;
f[i][t[i]]-=min;
}
flux+=min;
}
nrd++;
}
}
int main()
{
cit();
flux_max();
fout<<flux;
fin.close();
fout.close();
return 0;
}