Pagini recente » Cod sursa (job #356763) | Cod sursa (job #1811145) | Cod sursa (job #1254656) | Cod sursa (job #690987) | Cod sursa (job #1117768)
#include <cstdio>
#include <vector>
#define inf 3333333
#define NMax 1005
using namespace std;
int viz[NMax],tata[NMax],que[NMax],N;
int cap[NMax][NMax],fl[NMax][NMax];
vector<int> vc[NMax];
int bf ()
{
int i,st=1,dr=1,crt;
viz[1]=1;
for (i=2; i<=N; i++)
viz[i]=0;
que[st]=1;
while (st<=dr)
{
crt=que[st];
if (crt!=N)
{
for (i=0; i<vc[crt].size(); i++)
if (!viz[vc[crt][i]] && cap[crt][vc[crt][i]]>fl[crt][vc[crt][i]])
{
que[++dr]=vc[crt][i];
viz[vc[crt][i]]=1;
tata[vc[crt][i]]=crt;
}
}
st++;
}
return viz[N];
}
int main()
{
int i,crt,min_flux,flux=0,x,y,c,M,nod;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&N,&M);
for (i=1; i<=M; i++)
{
scanf("%d%d%d",&x,&y,&c);
cap[x][y]=c;
vc[x].push_back(y);
vc[y].push_back(x);
}
while (bf())
{
for (i=0; i<vc[N].size(); i++)
{
crt=vc[N][i];
if (viz[crt])
{
min_flux=inf;
for (nod=N; nod!=1; nod=tata[nod])
if (cap[tata[nod]][nod]-fl[tata[nod]][nod]<min_flux)
min_flux=cap[tata[nod]][nod]-fl[tata[nod]][nod];
for (nod=N; nod!=1; nod=tata[nod])
{
fl[tata[nod]][nod]+=min_flux;
fl[nod][tata[nod]]-=min_flux;
}
}
flux+=min_flux;
}
}
printf("%d\n",flux);
return 0;
}