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