Pagini recente » Cod sursa (job #485928) | Cod sursa (job #3261844) | Cod sursa (job #1617574) | Cod sursa (job #1529526) | Cod sursa (job #302738)
Cod sursa(job #302738)
#include<fstream.h>
#include<string.h>
#define nx 1023
int cap[nx][nx],flux[nx][nx];
int n,m,tat[nx];
inline int min(int a,int b)
{
if (a<b) return a;
return b;
}
int bfs()
{
int Q[nx]={0};
memset(tat,0,sizeof(tat));
Q[0]=1;
for (int p=0,u=0;p<=u;++p)
for (int i=1,nod=Q[p];i<=n;++i)
if (!tat[i] && cap[nod][i]>flux[nod][i])
{
tat[i]=nod;
Q[++u]=i;
if (i==n) return 1;
}
return 0;
}
int fluxx()
{
int r,rez,j;
while (bfs())
for (int i=1;i<=n;++i)
if (cap[i][n]>flux[i][n])
{
r=cap[i][n]-flux[i][n];
for (j=i;j!=1;j=tat[j])
r=min(r,cap[tat[j]][j]-flux[tat[j]][j]);
for (j=i;j!=1;j=tat[j])
{
flux[tat[j]][j]+=r;
flux[j][tat[j]]-=r;
}
rez+=r;
flux[i][n]+=r;
flux[n][i]-=r;
}
return rez;
}
int main()
{
ifstream be ("maxflow.in");
ofstream ki ("maxflow.out");
be>>n>>m;
int i,x,y,z;
for (i=1;i<=m;++i)
{
be>>x>>y>>z;
cap[x][y]=z;
}
be.close();
ki<<fluxx()<<'\n';
ki.close();
return 0;
}