Pagini recente » Cod sursa (job #312050) | Cod sursa (job #1297919) | Cod sursa (job #2918396) | Cod sursa (job #2544244) | Cod sursa (job #1817706)
#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 t[nmax];
int flow,fmin,n,m,i;
int df(int x)
{
if(x!=n)
for(auto it:v[x])
{
if(f[x][it]>=c[x][it] || viz[it])
continue;
if(it==n)
{
viz[n]=1;
continue;
}
viz[it]=1;
t[it]=x;
df(it);
}
}
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;
df(1);
while(viz[n])
{
for(auto it:v[n])
{
if(f[it][n]>=c[it][n] || !viz[it])
continue;
t[n]=it;
fmin=inf;
for(i=n; i>1; i=t[i])
fmin=min(fmin,c[t[i]][i]-f[t[i]][i]);
if(!fmin)
continue;
for(i=n; i>1; i=t[i])
{
f[t[i]][i]+=fmin;
f[i][t[i]]-=fmin;
}
flow+=fmin;
}
for(int i=2; i<=n; ++i)
viz[i]=0;
df(1);
}
fout<<flow;
}