Pagini recente » Cod sursa (job #3240040) | Cod sursa (job #117868) | Cod sursa (job #3272129) | Cod sursa (job #36385) | Cod sursa (job #270176)
Cod sursa(job #270176)
#include<stdio.h>
#include<vector>
#define MAXN 1024
#define CEVAMARE 10000000
using namespace std;
int x,y,i,n,m,z,minf,flow;
vector <int> a[MAXN];
int c[MAXN][MAXN],tata[MAXN];
int bfs()
{
int i,p,u,x,ok=0;
int Q[MAXN];
tata[1]=1;
memset(tata,0,sizeof(tata));
for(p=1,u=1,Q[p]=1;p<=u;p++)
{
x=Q[p];
for(i=0;i<a[x].size();i++)
if(c[x][a[x][i]]>0 && !tata[a[x][i]])
{
if(a[x][i]==n)
return 1;
Q[++u]=a[x][i];
tata[a[x][i]]=x;
}
}
return 0;
}
int main(void)
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
c[x][y]=z;
a[x].push_back(y);
a[y].push_back(x);
}
while(bfs())
{
minf=CEVAMARE;
for(i=0;i<a[n].size();i++)
if(tata[a[n][i]])
{
minf=c[a[n][i]][n];
for(x=a[n][i];x!=1;x=tata[x])
if(c[tata[x]][x]<minf)
minf=c[tata[x]][x];
flow+=minf;
c[a[n][i]][n]-=minf;
c[n][a[n][i]]+=minf;
for(x=a[n][i];x!=1;x=tata[x])
{
c[tata[x]][x]-=minf;
c[x][tata[x]]+=minf;
}
}
}
printf("%d\n",flow);
return 0;
}