Pagini recente » Cod sursa (job #2817763) | Cod sursa (job #2677309) | Cod sursa (job #2700991) | Cod sursa (job #3245486) | Cod sursa (job #719139)
Cod sursa(job #719139)
#include<stdio.h>
#include<vector>
using namespace std;
vector<int>g[1024];
int m,n,i,j,k,q,x,y,f[1024][1024],c[1024][1024],t[1024],flux,r;
inline bool bf()
{
int q[1024],nod;
bool fol[1024];
vector<int>::iterator it;
for(i=2;i<=n;++i)fol[i]=false;;
q[0]=q[1]=1;
i=1;
while(i<=q[0])
{
nod=q[i];
if(nod==n)break;
for(it=g[nod].begin();it!=g[nod].end();++it)
{
if(c[nod][*it]==f[nod][*it] || fol[*it])continue;
q[++q[0]]=*it;
t[*it]=nod;
fol[*it]=1;
}
++i;
}
return (fol[n]);
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=0;i<m;++i)
{
scanf("%d%d%d",&x,&y,&q);
c[x][y]=q;
g[x].push_back(y);
g[y].push_back(x);
}
flux=0;
while(bf())
{
r=2000000000;
for(i=n;i!=1;i=t[i]) if(r>c[t[i]][i]-f[t[i]][i])r=c[t[i]][i]-f[t[i]][i];
for(i=n;i!=1;i=t[i]) f[t[i]][i]+=r,f[i][t[i]]-=r;
flux+=r;
}
printf("%d\n",flux);
return 0;
}