Pagini recente » Cod sursa (job #2002312) | Cod sursa (job #2025827) | Cod sursa (job #2155229) | Cod sursa (job #1738669) | Cod sursa (job #286838)
Cod sursa(job #286838)
#include <stdio.h>
#include <vector>
#define N 1001
#define inf 0x3f3f3f
using namespace std;
int flux,n,m;
int coada[N],tati[N];
int cp[N][N],F[N][N];
vector <int > V[N];
void citire()
{
int a,b,cap;
scanf ("%d %d",&n,&m);
for (int i=0;i<m;i++)
{
scanf ("%d %d %d",&a,&b,&cap);
cp[a][b]=cap;
V[a].push_back(b);
V[b].push_back(a);
}
}
int viz()
{
int nr=1,nod,nodf;
for (int i=2;i<=n;i++)
tati[i]=0;
tati[1]=-1;
coada[0]=1;
for (int i=0;i<nr;i++)
{
nod=coada[i];
for (typeof V[nod].begin() i=V[nod].begin();i<V[nod].end();i++)
{
nodf=*i;
if (tati[nodf] || cp[nod][nodf]<=F[nod][nodf])
continue;
tati[nodf]=nod;
coada[nr++]=nodf;
if (nodf==n)
return 1;
}
}
return 0;
}
void solve()
{
int fl=inf,nod;
while (viz())
{
for (int i=1;i<n;i++)
{
if (!tati[i] || cp[i][n]<=F[i][n])
continue;
fl=inf;
nod=n;
while (nod!=1)
{
if (fl>cp[tati[nod]][nod]-F[tati[nod]][nod])
fl=cp[tati[nod]][nod]-F[tati[nod]][nod];
nod=tati[nod];
}
if (!fl)
continue;
flux+=fl;
nod=n;
while (nod!=1)
{
F[tati[nod]][nod]+=fl;
F[nod][tati[nod]]-=fl;
nod=tati[nod];
}
}
}
}
int main ()
{
freopen ("maxflow.in","r",stdin);
freopen ("maxflow.out","w",stdout);
citire();
solve();
printf("%d\n",flux);
return 0;
}