Pagini recente » Cod sursa (job #1888721) | Cod sursa (job #2842460) | Cod sursa (job #596452) | Cod sursa (job #817520) | Cod sursa (job #1139120)
#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 i,x,y,z;
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())
{
fmin=69000000;
for(i=n;i!=1;i=t[i])
fmin=min(fmin,f[i][t[i]]);
for(i=n;i!=1;i=t[i])
{
f[t[i]][i]+=fmin;
f[i][t[i]]-=fmin;
}
flow+=fmin;
}
fout<<flow<<"\n";
return 0;
}