Pagini recente » Cod sursa (job #472307) | Cod sursa (job #144007) | Cod sursa (job #233914) | Cod sursa (job #1476629) | Cod sursa (job #783407)
Cod sursa(job #783407)
#include<fstream>
using namespace std;
#define N 1002
#define inf 1000000000
int cap[N][N],flux[N][N];
int n,m,x,y,c,i;
int Q[N],viz[N],t[N];
int bfs(int s,int d)
{int i,p,u,nd;
p=u=1; Q[1]=s;
for(i=1;i<=n;i++)t[i]=viz[i]=0;
while(p<=u)
{
nd=Q[p++];
for(i=1;i<=n;i++)
if(!viz[i] && cap[nd][i]>flux[nd][i])
{
viz[i]=1;
t[i]=nd;
Q[++u]=i;
}
}
return viz[d];
}
int dinic(int s,int d)
{int flow=0,minn,i,j;
while(bfs(s,d))
{
for(j=1;j<=n;j++)
if(cap[j][d]>flux[j][d])
{
minn=cap[j][d]-flux[j][d];
for(i=j;i!=s;i=t[i])
minn=min(minn,cap[t[i]][i]-flux[t[i]][i]);
flux[j][d]+=minn;
flux[d][j]-=minn;
for(i=j;i!=s;i=t[i])
{
flux[t[i]][i]+=minn;
flux[i][t[i]]-=minn;
}
flow+=minn;
}
}
return flow;
}
int main()
{
ifstream f("maxflow.in");ofstream g("maxflow.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
cap[x][y]=c;
}
g<<dinic(1,n);
f.close();g.close();
return 0;}