Pagini recente » Cod sursa (job #277854) | Cod sursa (job #2809051) | Cod sursa (job #973716) | Cod sursa (job #1594408) | Cod sursa (job #408707)
Cod sursa(job #408707)
#include<stdio.h>
#include<vector>
using namespace std;
#define Nmax 1005
#define inf 0x3f3f3f3f
int F[Nmax][Nmax],N,flow;
vector <int> l[Nmax];
int c[Nmax],v[Nmax],p[Nmax];
int BF()
{
memset(v,0,sizeof(v));
int st,dr,nod;
c[1]=1;
v[1]=1;
for(st=dr=1; st<=dr ;++st)
for(int i=0;i<(int)l[c[st]].size();++i)
{
nod=l[c[st]][i];
if (!v[nod] && F[c[st]][nod])
{
c[++dr]=nod;
p[dr]=st;
v[nod]=dr;
}
}
if (!v[N])
return 0;
return 1;
}
void solve()
{
int min;
for(; BF() ;)
{
min=inf;
for(int t=v[N]; p[t] ; t=p[t])
if (min > F[c[p[t]]][c[t]])
min = F[c[p[t]]][c[t]];
for(int t=v[N]; p[t] ; t=p[t])
{
F[c[p[t]]][c[t]] -= min;
F[c[t]][c[p[t]]] += min;
}
flow += min;
}
printf("%d\n",flow);
}
void cit();
int main()
{
cit();
solve();
return 0;
}
void cit()
{
int a,b,x,M;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&N,&M);
for( ; M ;--M)
{
scanf("%d%d%d",&a,&b,&x);
F[a][b]=x;
l[a].push_back(b);
l[b].push_back(a);
}
}