Pagini recente » Cod sursa (job #2196661) | Cod sursa (job #3154954) | Cod sursa (job #78281) | Cod sursa (job #1594269) | Cod sursa (job #1048074)
#include<stdio.h>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
int n,ta[1005],pret[1005][1005],q[1005];
vector<int>adi[1005];
void bfs()
{
int start = 0, avans=1,a,b,i;
q[0]=1;
ta[1]=-2;
while(avans>start && ta[n]==-1)
{
for(b=q[start++],i=0,a;i<adi[b].size();i++)
{
a=adi[b][i];
if(ta[a]==-1 && pret[b][a]!=0)
{
q[avans]=a;
avans++;
ta[a]=b;
}
}
}
}
int da()
{
int l=0,a,z,b,mi;
while (1)
{
memset(ta, -1, sizeof(ta));
bfs();
if(ta[n] == -1)
break;
for(z=1;z<=n;z++)
if(pret[z][n] && ta[z] != -1) {
mi=pret[z][n];
for(a=z,b=ta[a];b>0;a=b,b=ta[a])
mi=min(mi,pret[b][a]);
l+=mi;
pret[z][n]-=mi;
pret[n][z]+=mi;
for(a=z,b=ta[a];b>=0;a=b,b=ta[a])
{
pret[b][a]-=mi;
pret[a][b]+=mi;
}
}
}
return l;
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int s,m,a,b,c,i;
scanf("%d%d",&n,&m);
s=1;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
pret[a][b]+=c;
adi[a].push_back(b);
adi[b].push_back(a);
}
printf("%d\n",da());
return 0;
}