Pagini recente » Cod sursa (job #3216561) | Cod sursa (job #782313) | Cod sursa (job #825484) | Cod sursa (job #131011) | Cod sursa (job #1691329)
#include <stdio.h>
#include <vector>
#define NMAX 1024
#define inf 0x3f3f3f3f
using namespace std;
int x,y,z,i,j,k,l,m,n,flux,fmin;
int tata[NMAX],viz[NMAX],cd[NMAX];
int C[NMAX][NMAX],C1[NMAX][NMAX];
vector<int> T[NMAX];
void zero()
{
int i;
for(i=1;i<n+1;i++)
viz[i]=0;
}
void zero1()
{
int i;
for(i=1;i<n+1;i++)
tata[i]=0;
}
int bfs()
{
int nod;
int nod1;
zero();
cd[0]=1;
cd[1]=1;
viz[1]=1;
for(j=1;j<cd[0]+1;j++)
{
nod=cd[j];
for(i=0;i<T[nod].size();i++)
{
nod1=T[nod][i];
if(C[nod][nod1]==C1[nod][nod1]||viz[nod1]) continue;
viz[nod1]=1;
tata[nod1]=nod;
cd[0]++;
cd[cd[0]]=nod1;
if(nod1==n) return 1;
}
}
return 0;
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d", &n ,&m);
for(i=1;i<m+1;i++)
{
scanf("%d %d %d",&x,&y,&z);
C[x][y]=C[x][y]+z;
T[x].push_back(y);
T[y].push_back(x);
}
while(bfs()==1)
for(j=0;j<T[n].size();j++)
{
fmin=inf;
i=T[n][j];
if(C1[i][n]==C[i][n]||!viz[i]) continue;
tata[n]=i;
for(i=n;i!=1;i=tata[i])
if(fmin>C[tata[i]][i]-C1[tata[i]][i])
fmin=C[tata[i]][i]-C1[tata[i]][i];
if(fmin==0) continue;
for(i=n;i!=1;i=tata[i])
{
C1[tata[i]][i]=C1[tata[i]][i]+fmin;
C1[i][tata[i]]=C1[i][tata[i]]-fmin;
}
flux=flux+fmin;
}
printf("%d",flux);
return 0;
}