Pagini recente » Cod sursa (job #3121984) | Cod sursa (job #399630) | Cod sursa (job #2493893) | Cod sursa (job #2629576) | Cod sursa (job #1945647)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int vTati[1001],n,m;
vector <int> G[1001];
vector <int> :: iterator IT;
queue <int> deBFS;
int mCost[1001][1001],mFlux[1001][1001];
void citire()
{
int aux1,aux2,aux3;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&aux1,&aux2,&aux3);
G[aux1].push_back(aux2);
G[aux2].push_back(aux1);
mCost[aux1][aux2]=aux3;
}
}
void bfs()
{
int nod;
for(int i=1;i<=n;i++)
vTati[i]=0;
vTati[1]=1;
deBFS.push(1);
while(!deBFS.empty())
{
nod=deBFS.front();
deBFS.pop();
for(IT=G[nod].begin();IT!=G[nod].end();IT++)
{
if(vTati[*IT]==0&&mFlux[nod][*IT]!=mCost[nod][*IT])
{
vTati[*IT]=nod;
deBFS.push(*IT);
}
}
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
citire();
int aux,flux=0x3f3f3f3f,ans=0;
bfs();
while(vTati[n])
{
for(IT=G[n].begin();IT!=G[n].end();IT++)
{
if(vTati[*IT])
{
vTati[n]=*IT;
aux=n;
while(aux!=1)
{
flux=min(flux,mCost[vTati[aux]][aux]-mFlux[vTati[aux]][aux]);
aux=vTati[aux];
}
aux=n;
while(aux!=1)
{
mFlux[vTati[aux]][aux]+=flux;
mFlux[aux][vTati[aux]]-=flux;
aux=vTati[aux];
}
}
if(flux!=0x3f3f3f3f)
ans+=flux;
}
bfs();
}
printf("%d",ans);
return 0;
}