Pagini recente » Cod sursa (job #1242925) | Cod sursa (job #1182776) | Cod sursa (job #2080974) | Cod sursa (job #1793437) | Cod sursa (job #1702120)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v[1001];
int n,x,y,z,m,a[1001][1001],tata[1001],viz[1001],b[1001][1001],i,j,flow,q[1001],cate;
int bfs()
{
int i,j;
q[1]=1;
for(i=1;i<=n;i++)
viz[i]=0;
viz[1]=1;
int in=1,sf=1;
while(in<=sf)
{
for(i=0;i<v[q[in]].size();i++)
if(viz[v[q[in]][i]]==0&&a[q[in]][v[q[in]][i]]!=b[q[in]][v[q[in]][i]])
{
viz[v[q[in]][i]]=1;
sf++;
q[sf]=v[q[in]][i];
tata[v[q[in]][i]]=q[in];
if(v[q[in]][i]==n)
{
cate=in;
return 1;
}
}
in++;
}
return 0;
}
int main ()
{
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);
a[x][y]=z;
v[x].push_back(y);
v[y].push_back(x);
}
for(flow=0;bfs()!=0;)
{
int fmin=2000000000,nod;
for(nod=n;nod!=1;nod=tata[nod])
fmin=min(fmin,a[tata[nod]][nod]-b[tata[nod]][nod]);
for(nod=n;nod!=1;nod=tata[nod])
{
b[tata[nod]][nod]+=fmin;
b[nod][tata[nod]]-=fmin;
}
flow+=fmin;
}
printf("%d",flow);
return 0;
}