Pagini recente » Cod sursa (job #910022) | Cod sursa (job #1952211) | Cod sursa (job #2489177) | Cod sursa (job #2204199) | Cod sursa (job #1946023)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
int vTati[1001],n,m,vViz[1001];
vector <int> G[1001];
vector <int> :: iterator IT;
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;
}
}
bool bfs()
{
int nod;
memset(vViz,0,sizeof vViz);
memset(vTati,0,sizeof vTati);
queue <int> deBFS;
vViz[1]=1;
deBFS.push(1);
while(!deBFS.empty())
{
nod=deBFS.front();
deBFS.pop();
if(nod==n) continue;
for(IT=G[nod].begin(); IT!=G[nod].end(); IT++)
{
if(vViz[*IT]==0&&mFlux[nod][*IT]<mCost[nod][*IT])
{
vViz[*IT]=1;
vTati[*IT]=nod;
deBFS.push(*IT);
}
}
}
return vViz[n];
/*for(int i=1;i<=n;i++)
printf("%d ",vTati[i]);
printf("\n");
*/
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
citire();
int aux,flux=0x3f3f3f3f,ans=0;
while(bfs())
for(IT=G[n].begin(); IT!=G[n].end(); IT++)
{
flux=0x3f3f3f3f;
if(vViz[*IT]&&mCost[*IT][n]>mFlux[*IT][n])
{
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;
}
printf("%d",ans);
return 0;
}