Pagini recente » Cod sursa (job #528204) | Cod sursa (job #2133628) | Cod sursa (job #148298) | Cod sursa (job #2512996) | Cod sursa (job #952752)
Cod sursa(job #952752)
#include<fstream>
#define N 1010
#define INF 999999999
#include<vector>
#include<cstring>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int fluxt,fluxm,i,n,m,x,y,cost,c[N][N],fl[N][N],t[N];
vector<int>l[1010];
bool viz[1010];
inline int bfs()
{
int p,u,q[1010];
memset(viz,0,sizeof(viz));
q[1]=1;
p=u=1;
viz[1]=1;
while(p<=u)
{
x=q[p];
++p;
if(x==n)
continue;
for(i=0;i<l[x].size();++i)
{
y=l[x][i];
if(viz[y]||c[x][y]==fl[x][y])
continue;
else
{
++u;
q[u]=y;
t[y]=x;
viz[y]=1;
}
}
}
return !viz[n];
}
int main()
{
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>x>>y>>cost;
c[x][y]+=cost;
l[x].push_back(y);
l[y].push_back(x);
}
while(1)
{
if(bfs())
break;
for(i=0;i<l[n].size();++i)
{
x=l[n][i];
if(fl[x][n]==c[x][n]||!viz[x])
continue;
t[n]=x;
fluxm=INF;
x=n;
while(x!=1)
{
fluxm=min(fluxm,c[t[x]][x]-fl[t[x]][x]);
x=t[x];
}
if(fluxm==0)
continue;
x=n;
while(x!=1)
{
fl[t[x]][x]+=fluxm;
fl[x][t[x]]-=fluxm;
x=t[x];
}
fluxt+=fluxm;
}
}
g<<fluxt<<'\n';
return 0;
}