Pagini recente » Cod sursa (job #1654890) | Cod sursa (job #3252487) | Statistici Todoran Claudia (klau) | Cod sursa (job #2071657) | Cod sursa (job #852244)
Cod sursa(job #852244)
#include<fstream>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,p,u,nrd,flux;
int d[1000],v[1000],t[1000],cc[1000];
int c[1000][1000],f[1000][1000];
void cit()
{
int i,x,y,cost;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>cost;
c[x][y]=cost;
}
}
void creare(int k)
{
if(k!=0)
{
creare(t[k]);
d[++nrd]=k;
}
}
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)
{
nrd=0;
creare(n);
return 1;
}
for(i=1;i<=n;i++)
if(c[nod][i]>f[nod][i] && v[i]==0)
{
u++;
cc[u]=i;
t[i]=nod;
v[i]=1;
}
p++;
}
return 0;
}
void flux_max()
{
int i,min;
while(drum())
{
min=999999;
for(i=1;i<nrd;i++)
if(min>c[d[i]][d[i+1]]-f[d[i]][d[i+1]])
min=c[d[i]][d[i+1]]-f[d[i]][d[i+1]];
for(i=1;i<nrd;i++)
{
f[d[i]][d[i+1]]+=min;
f[d[i+1]][d[i]]-=min;
}
flux+=min;
}
}
int main()
{
cit();
flux_max();
fout<<flux;
fin.close();
fout.close();
return 0;
}