Pagini recente » Cod sursa (job #152113) | Cod sursa (job #2692202) | Cod sursa (job #568870) | Cod sursa (job #2495033) | Cod sursa (job #403149)
Cod sursa(job #403149)
#include<stdio.h>
#include<vector>
#include<queue>
#define Nmx 1002
#define INF 1000001
using namespace std;
int n,m,viz[Nmx],prec[Nmx],C[Nmx][Nmx],F[Nmx][Nmx];
vector < int > G[Nmx];
queue < int > Q;
void citire()
{
scanf("%d%d",&n,&m);
int x,y,c;
for(int i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&c);
C[x][y]=c;
G[x].push_back(y);
G[y].push_back(x);
}
}
int bfs()
{
int nod;
memset(viz,0,sizeof(viz));
viz[1]=1;
for(Q.push(1);!Q.empty();Q.pop())
{
nod=Q.front();
if(nod==n)
continue;
for(int i=0;i<G[nod].size();++i)
if(C[nod][G[nod][i]]-F[nod][G[nod][i]]>0&&!viz[G[nod][i]])
{
viz[G[nod][i]]=1;
prec[G[nod][i]]=nod;
Q.push(G[nod][i]);
}
}
return viz[n];
}
void solve()
{
int nod,i,j,sol=0;
while(bfs())
for(i=0;i<G[n].size();++i)
{
nod=G[n][i];
if(C[nod][n]-F[nod][n]>0&&viz[nod])
{
int Vmin=INF;
for(j=n;prec[j];j=prec[j])
Vmin=min(Vmin,C[prec[j]][j]-F[prec[j]][j]);
for(j=n;prec[j];j=prec[j])
{
F[prec[j]][j]+=Vmin;
F[j][prec[j]]-=Vmin;
}
sol+=Vmin;
}
}
printf("%d\n",sol);
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
citire();
solve();
return 0;
}