Pagini recente » Cod sursa (job #2615484) | Cod sursa (job #1184715) | Cod sursa (job #28506) | Cod sursa (job #2868598) | Cod sursa (job #383013)
Cod sursa(job #383013)
#include<cstdio>
#include<vector>
#define NMAX 1024
#define Inf 1000000000
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
int C[NMAX][NMAX],F[NMAX][NMAX],Pre[NMAX],Min[NMAX],n;
vector<int> G[NMAX];
bool BFS()
{
int Q[NMAX],l,r,i,x,y;
Pre[1]=-1; Min[1]=Inf;
for(i=2;i<=n;++i)
Pre[i]=0;
Q[l=r=0]=1;
while(l<=r)
{
x=Q[l++];
for(i=0;i<G[x].size();++i)
{
y=G[x][i];
if(!Pre[y] && F[x][y]<C[x][y])
{
Q[++r]=y;
Pre[y]=x;
Min[y]=min(Min[x],C[x][y]-F[x][y]);
if(y==n)
return 1;
}
}
}
return 0;
}
int main()
{
int m,x,y,c,maxflow=0;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d%d",&x,&y,&c);
C[x][y]=c;
G[x].push_back(y);
G[y].push_back(x);
}
while(BFS())
{
maxflow+=Min[n];
x=n;
while(x!=1)
{
F[Pre[x]][x]+=Min[n];
F[x][Pre[x]]-=Min[n];
x=Pre[x];
}
}
printf("%d\n",maxflow);
return 0;
}