Pagini recente » Cod sursa (job #2211876) | Cod sursa (job #1569067) | Cod sursa (job #509904) | Cod sursa (job #792188) | Cod sursa (job #2308595)
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
vector<int> G[1001];
int n,m,i,x,y,z,flow,TT[1001],F[1001][1001],C[1001][1001],viz[1001],cd[1001],rasp,flowmin,nod;
int BF()
{
int i, j, nod, V;
cd[0]=1;
cd[1]=1;
memset(viz,0,sizeof(viz));
viz[1]=1;
for (i=1; i<=cd[0]; i++)
{
nod=cd[i];
for(j=0;j<G[nod].size();j++)
{
V=G[nod][j];
if(C[nod][V]==F[nod][V]||viz[V])
{
continue;
}
viz[V]=1;
cd[++cd[0]]=V;
TT[V]=nod;
if(V==n)
{
return 1;
}
}
}
return 0;
}
int main()
{
f>>n>>m;
for (i=1; i<=m; i++)
{
f>>x>>y>>z;
C[x][y]+=z;
G[x].push_back(y);
G[y].push_back(x);
}
for (flow=0;BF(); flow+=flowmin)
{
flowmin=10000009;
for(nod=n; nod!=1; nod=TT[nod])
{
flowmin=min(flowmin,C[TT[nod]][nod]-F[TT[nod]][nod]);
}
for (nod=n; nod!=1; nod=TT[nod])
{
F[TT[nod]][nod]+=flowmin;
F[nod][TT[nod]]-=flowmin;
}
}
g<<flow;
return 0;
}