Pagini recente » Cod sursa (job #1734920) | Cod sursa (job #1375028) | Cod sursa (job #3183240) | Cod sursa (job #2141958) | Cod sursa (job #415450)
Cod sursa(job #415450)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
int n,m,minim,f=0;
bool k=0;
vector < int > a[1020];
int coada[1020],pred[1020];
int cap[1020][1020];
const int inf=1<<30;
int flux()
{
memset(coada,0,sizeof(coada));
memset(pred,0,sizeof(pred));
coada[1]=1;
int r=1,p;
minim=inf;
for (p=1;p<=r;++p)
{
for (int i=0;i<a[coada[p]].size();++i)
{
if (cap[coada[p]][a[coada[p]][i]]>0&&!pred[a[coada[p]][i]])
{
coada[++r]=a[coada[p]][i];
pred[a[coada[p]][i]]=coada[p];
}
}
}
if (!pred[n])
return 0;
int i=n;
while (i!=1)
{
if (cap[pred[i]][i]<minim)
minim=cap[pred[i]][i];
i=pred[i];
}
i=n;
while (i!=1)
{
cap[pred[i]][i]-=minim;
cap[i][pred[i]]+=minim;
i=pred[i];
}
f+=minim;
return 1;
}
int main()
{
freopen ("maxflow.in","r",stdin);
freopen ("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
int x,y,z;
for (int i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
a[x].push_back(y);
a[y].push_back(x);
cap[x][y]=z;
}
while (flux());
printf("%d",f);
return 0;
}