Pagini recente » Cod sursa (job #1384338) | Cod sursa (job #203393) | Cod sursa (job #2736248) | Cod sursa (job #2581995) | Cod sursa (job #1496649)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int cap[1004][1004],q[1004],pred[1004];
vector<int> v[1004];
void bfs(int s , int t)
{
int start=0,stop=0;
stop++;
q[stop]=s;
pred[s]=-2;
while(start<stop&&pred[t]==-1)
{
start++;
for(int i=0;i<v[q[start]].size();i++)
{
int nod=v[q[start]][i];
if(pred[nod]==-1&&cap[q[start]][nod]!=0)
{
pred[nod]=q[start];
stop++;
q[stop]=nod;
}
}
}
}
int flux(int n, int s ,int t)
{
int sol=0;
while(1)
{
memset(pred, -1, sizeof(pred));
bfs(s,t);
if(pred[t]==-1)
break;
int capmin;
for(int nod=1;nod<=n;nod++)
{
if(pred[nod]!=-1&&cap[nod][t]!=0)
{
capmin=cap[nod][t];
for(int vv=nod,u=pred[vv];u>0;vv=u,u=pred[vv])
capmin=min(capmin, cap[u][vv]);
if(!capmin)
continue;
cap[nod][t]-=capmin;
cap[t][nod]+=capmin;
for(int vv=nod,u=pred[vv];u>0;vv=u,u=pred[vv])
{
cap[u][vv]-=capmin;
cap[vv][u]+=capmin;
}
sol+=capmin;
}
}
}
return sol;
}
int main()
{
int n,m,i,x,y,c;
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,&c);
cap[x][y]+=c;
v[x].push_back(y);
v[y].push_back(x);
}
printf("%d",flux(n,1,n));
return 0;
}