Pagini recente » Cod sursa (job #1471152) | Cod sursa (job #2671170) | Cod sursa (job #1941217) | Cod sursa (job #1111667) | Cod sursa (job #1168589)
#include <cstdio>
#include <vector>
#include <queue>
#define Nmax 1005
#define INF 2000000000
using namespace std;
vector <int> L[Nmax];
queue <int> Q;
int F[Nmax][Nmax],C[Nmax][Nmax],tata[Nmax],N;
bool viz[Nmax];
inline bool Bfs()
{
int i,j,nod,len,n;
for(i=2;i<=N;++i)
viz[i]=false;
viz[1]=true;
while(Q.size())
Q.pop();
Q.push(1);
while(!Q.empty())
{
nod=Q.front(); Q.pop();
if(nod==N)
continue;
len=L[nod].size();
for(j=0;j<len;++j)
{
n=L[nod][j];
if(!viz[n] && F[nod][n]<C[nod][n])
{
viz[n]=true;
Q.push(n);
tata[n]=nod;
}
}
}
return viz[N];
}
int main()
{
int M,x,y,z,flow=0,minflow,len,n,i;
freopen ("maxflow.in","r",stdin);
freopen ("maxflow.out","w",stdout);
scanf("%d%d", &N,&M);
while(M--)
{
scanf("%d%d%d", &x,&y,&z);
L[x].push_back(y);
L[y].push_back(x);
C[x][y]+=z;
}
while(Bfs())
{
len=L[N].size();
for(i=0;i<len;++i)
if(viz[L[N][i]] && F[L[N][i]][N]<C[L[N][i]][N])
{
n=L[N][i];
tata[N]=n;
minflow=INF;
for(n=N;tata[n];n=tata[n])
minflow=min(minflow,C[tata[n]][n]-F[tata[n]][n]);
if(!minflow)
continue;
for(n=N;tata[n];n=tata[n])
{
F[tata[n]][n]+=minflow;
F[n][tata[n]]-=minflow;
}
flow+=minflow;
}
}
printf("%d\n", flow);
return 0;
}