Pagini recente » Cod sursa (job #1601855) | Cod sursa (job #1669232) | Cod sursa (job #2887032) | Cod sursa (job #675060) | Cod sursa (job #1817693)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
#define nmax 1010
const int inf = 1e9;
vector <int> v[nmax];
int c[nmax][nmax];
int f[nmax][nmax];
int viz[nmax];
int son[nmax];
int flow,fmin,n,m,i;
bool df(int x)
{
for(auto it:v[x])
{
if(f[x][it]>=c[x][it] || viz[it])
continue;
viz[it]=1;
son[x]=it;
if(it==n || df(it))
return 1;
}
return 0;
}
int main()
{
fin>>n>>m;
for(i=1; i<=m; ++i)
{
int a,b,z;
fin>>a>>b>>z;
v[a].push_back(b);
v[b].push_back(a);
c[a][b]+=z;
}
viz[1]=1;
while(df(1))
{
for(auto it:v[n])
{
if(f[it][n]>=c[it][n] || !viz[it])
continue;
son[it]=n;
fmin=inf;
for(i=1; i<n; i=son[i])
fmin=min(fmin,c[i][son[i]]-f[i][son[i]]);
if(!fmin)
continue;
for(i=1; i<n; i=son[i])
{
f[i][son[i]]+=fmin;
f[son[i]][i]-=fmin;
}
flow+=fmin;
}
for(int i=2; i<=n; ++i)
viz[i]=0;
}
fout<<flow;
}