Pagini recente » Cod sursa (job #1896476) | Cod sursa (job #2479938) | Cod sursa (job #23314) | Cod sursa (job #1154112) | Cod sursa (job #301085)
Cod sursa(job #301085)
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
vector<int>l[1001];
int c[1001][1001],t[1001],viz[1001];
int q[1001],rez,flm,n,m;
int bf()
{ int i;
int st=1,sf=2;
q[1]=1;
viz[1]=1;
while(st<sf)
{ int x=q[st];
for(i=0;i<l[x].size();i++)
if(c[x][l[x][i]]&&viz[l[x][i]]==0)
{ viz[l[x][i]]=1;
t[l[x][i]]=x;
q[sf++]=l[x][i];
if(l[x][i]==n)
return 1;
}
st++;
}
return 0;
}
int main()
{ freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{ int q,w,e;
scanf("%d%d%d",&q,&w,&e);
l[q].push_back(w);
l[w].push_back(q);
c[q][w]+=e;
}
while(bf())
{
for(int r=0;r<l[n].size();r++)
if(viz[l[n][r]]==1&&c[l[n][r]][n])
{
flm=1000000;
int j;
for(j=n;j!=1;j=t[j])
if(flm>c[t[j]][j])
flm=c[t[j]][j];
rez+=flm;
for(j=n;j!=1;j=t[j])
{ c[t[j]][j]-=flm;
c[j][t[j]]+=flm;
}
}
for(int u=1;u<=n;u++)
viz[u]=q[u]=0;
}
printf("%d\n",rez);
return 0;
}