Pagini recente » Cod sursa (job #455131) | Cod sursa (job #1231923) | Cod sursa (job #1407388) | Cod sursa (job #455152) | Cod sursa (job #1217173)
#include<fstream>
#include<vector>
#include<queue>
#include<cstring>
#define pb push_back
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
const int nmax = 1024;
vector<int> g[nmax];
queue<int> q;
int c[nmax][nmax],f[nmax][nmax],p[nmax],viz[nmax];
int n,m,x,y,z,i,j,mflow=0,fmin=0;
int bfs()
{
while (q.size()) q.pop();
q.push(1);
memset(viz,0,sizeof(viz));
viz[1]=1;
while (!q.empty())
{
int v=q.front();q.pop();
if (v==n) continue;
for (int j=0;j<g[v].size();j++)
{
int to=g[v][j];
if (viz[to] || c[v][to]==f[v][to]) continue;
++viz[to];
p[to]=v;
q.push(to);
}
}
return viz[n];
}
int main()
{
cin>>n>>m;
for (; m--;)
cin>>x>>y>>z,
g[x].pb(y),
g[y].pb(x),
c[x][y]=z;
for (;bfs();)
for (i=0;i<g[n].size();i++)
{
int v=g[n][i];
if (!viz[v] || c[v][n]==f[v][n]) continue;
fmin=1000000000;
p[n]=v;
for (j=n;j!=1;j=p[j])
fmin=min(fmin,c[p[j]][j]-f[p[j]][j]);
for (j=n;j!=1;j=p[j])
f[p[j]][j]+=fmin,
f[j][p[j]]-=fmin;
mflow+=fmin;
}
cout<<mflow;
return 0;
}