Pagini recente » Cod sursa (job #2383561) | Cod sursa (job #53320) | Cod sursa (job #653084) | Cod sursa (job #849789) | Cod sursa (job #573377)
Cod sursa(job #573377)
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
int n,sol,sw[1005],C[1000000],t[1005],flux[1005][1006],cap[1006][1006];
vector <int > v[1005];
int maxflux()
{
vector<int >:: iterator it;
int s,i,fmax,p,u,k;
p=u=1;
C[1]=1;
memset(sw,0,sizeof(sw));
sw[1]=1;
while(p<=u)
{
for (it=v[C[p]].begin();it<v[C[p]].end();++it)
if (sw[*it]==0 && cap[C[p]][*it]>flux[C[p]][*it] && *it!=n)
{
sw[*it]=1;
t[*it]=C[p];
C[++u]=*it;
}
++p;
}
s=0;
for (i=1;i<n;i++)
if (cap[i][n]>flux[i][n])
{
fmax=cap[i][n]-flux[i][n];
for (k=i;k>1;k=t[k])
fmax=min(fmax,cap[t[k]][k]-flux[t[k]][k]);
flux[i][n]+=fmax;
for (k=i;k>1;k=t[k])
{
flux[t[k]][k]+=fmax;
flux[k][t[k]]-=fmax;
}
s+=fmax;
}
return s;
}
void flow()
{
int i;
i=1;sol=0;
while(i!=sol)
{
i=sol;
sol+=maxflux();
}
}
void afisare()
{
ofstream g("maxflow.out");
g<<sol;
g.close();
}
void citire()
{
int i,m,x,y,c;
ifstream f("maxflow.in");
f>>n>>m;
for (i=1;i<=m;i++)
{
f>>x>>y>>c;
cap[x][y]=c;
v[x].push_back(y);
}
f.close();
}
int main()
{
citire();
flow();
afisare();
return 0;
}