Pagini recente » Cod sursa (job #1611139) | Cod sursa (job #1312865) | Cod sursa (job #2856008) | Cod sursa (job #1675875) | Cod sursa (job #288065)
Cod sursa(job #288065)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
long n,m,c[1001][1001],d[1001],cd[1001],F,R,v[1001],gata;
vector <long> g[1001];
void rd()
{
scanf("%ld%ld",&n,&m);
for(long i=1;i<=m;i++)
{
long x,y,z;
scanf("%ld%ld%ld",&x,&y,&z);
g[x].push_back(y);
g[y].push_back(x);
c[x][y]+=z;
}
}
void go(long i)
{
v[i]=1;
cd[1]=i;
long st=1,dr=2;
while(st<dr)
{
long u=cd[st];
for(long j=0;j<g[u].size();j++)
if(c[u][g[u][j]]&&!v[g[u][j]])
{
if(g[u][j]==n) continue;
v[g[u][j]]=1;
cd[dr]=g[u][j];
d[g[u][j]]=u;
dr++;
}
st++;
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
rd();
while(!gata)
{
gata=1;
long i;
for(i=1;i<=n;i++)
v[i]=cd[i]=0;
go(1);
for(i=0;i<g[n].size();i++)
if(v[g[n][i]]&&c[g[n][i]][n])
{
gata=0;
long u=g[n][i];
long R=666666666;
d[n]=u;
for(u=n;d[u];u=d[u])
if(c[d[u]][u]<R) R=c[d[u]][u];
for(u=n;d[u];u=d[u])
{
c[d[u]][u]-=R;
c[u][d[u]]+=R;
}
F+=R;
}
}
printf("%ld\n",F);
return 0;
}