Pagini recente » Cod sursa (job #810876) | Cod sursa (job #1160648) | Cod sursa (job #796766) | Cod sursa (job #1825941) | Cod sursa (job #1209196)
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
#define NMAX 1001
#define INF 200000000
int n,m,sol,nt;
int q[NMAX],t[NMAX],tata[NMAX],f[NMAX][NMAX];
vector<int>v[NMAX];
bool drum()
{
int i,st=1,dr=0,nod,dest;
nt=0;
memset(t,0,sizeof(t));
t[1]=1;
q[++dr]=1;
while(st<=dr)
{
nod=q[st];
++st;
for(i=0;i<v[nod].size();++i)
{
dest=v[nod][i];
if(f[dest][nod] && !t[dest])
{
if(dest==n)
tata[++nt]=nod;
else
{
t[dest]=nod;
q[++dr]=dest;
}
}
}
}
return nt;
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int i,j,maxc,x,y,c;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&c);
v[x].push_back(y);
v[y].push_back(x);
f[y][x]=c;
}
while(drum())
{
for(j=1;j<=nt;++j)
{
maxc=INF;
t[n]=tata[j];
for(i=n;i!=1;i=t[i])
if(f[i][t[i]]<maxc)
maxc=f[i][t[i]];
for(i=n;i!=1;i=t[i])
{
f[i][t[i]]-=maxc;
f[t[i]][i]+=maxc;
}
sol+=maxc;
}
}
printf("%d\n",sol);
return 0;
}