Pagini recente » Cod sursa (job #154818) | Cod sursa (job #2191641) | Cod sursa (job #2263649) | Cod sursa (job #722519) | Cod sursa (job #302760)
Cod sursa(job #302760)
#include<fstream.h>
#include<string.h>
#define nx 1025
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},viz[nx]={0};
memset(tat,0,sizeof(tat));
Q[1]=1;viz[1]=1;
int e=1,v=1,nod,i;
while (e<=v)
{
nod=Q[e++];
for (i=1;i<=n;++i)
if (!viz[i] && cap[nod][i]>flux[nod][i])
{
tat[i]=nod;
Q[++v]=i;
viz[i]=1;
}
}
return viz[n];
}
int fluxx()
{
int r,rez=0,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;
}