Pagini recente » Cod sursa (job #2985569) | Cod sursa (job #122158) | Cod sursa (job #1529499) | Cod sursa (job #1913627) | Cod sursa (job #1139147)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
int n,m,f[1001][1001],t[1001],q[1001],qs,fmin,flow;
vector<int> g[1001];
bool v[1001];
bool BFS()
{
qs=q[0]=1;
memset(v,0,sizeof v);
v[1]=1;
for(int i=0;i<qs;++i)
{
int nod=q[i];
for(size_t j=0;j<g[nod].size();++j)
{
int vecin=g[nod][j];
if(!f[vecin][nod] || v[vecin])
continue;
v[vecin]=1;
q[qs++]=vecin;
t[vecin]=nod;
if(vecin==n)
return 1;
}
}
return 0;
}
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int main()
{
int x,y,z,nod;
fin>>n>>m;
while(m--)
{
fin>>x>>y>>z;
f[y][x]=z;
g[x].push_back(y);
g[y].push_back(x);
}
while(BFS())
{
for(size_t i=0;i<g[n].size();++i)
{
nod=g[n][i];
fmin=69000000;
if(!f[n][nod] || !v[nod])
continue;
t[n]=nod;
for(nod=n;nod!=1;nod=t[nod])
fmin=min(fmin,f[nod][t[nod]]);
for(nod=n;nod!=1;nod=t[nod])
{
f[t[nod]][nod]+=fmin;
f[nod][t[nod]]-=fmin;
}
flow+=fmin;
}
}
fout<<flow<<"\n";
return 0;
}