Pagini recente » Profil janejones4237 | Cod sursa (job #1052208) | Cod sursa (job #2959765)
#include <bits/stdc++.h>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n, m;
int c[1001][1001];
int f[1001][1001];
int tr[1001];
vector<int> g[1001];
int cd[1001];
bool viz[1001];
int bfs()
{
int i, j, nod, v;
cd[0] = 1;
cd[1] = 1;
memset(viz, 0, sizeof(viz));
viz[1] = 1;
for(i=1; i<= cd[0]; i++)
{
nod = cd[i];
if(nod == n)
continue;
for(j=0; j<g[nod].size(); j++)
{
v = g[nod][j];
if(c[nod][v] == f[nod][v] || viz[v])
continue;
viz[v] = true;
cd[++cd[0]] = v;
tr[v] = nod;
}
}
return viz[n];
}
int main()
{
int i, fmin, flow, x, y, z, nod;
in>>n>>m;
for(i=1; i<=m; i++)
{
in>>x>>y>>z;
c[x][y] += z;
g[x].push_back(y);
g[y].push_back(x);
}
for(flow = 0; bfs();)
for(i=0; i<g[n].size(); i++)
{
nod = g[n][i];
if(f[nod][n] == c[nod][n] || !viz[nod]) continue;
tr[n] = nod;
fmin = 999999;
for(nod=n; nod!=1; nod=tr[nod])
fmin = min(fmin, c[tr[nod]][nod] - f[tr[nod]][nod]);
if(fmin==0)
continue;
for(nod = n; nod!=1; nod=tr[nod])
{
f[tr[nod]][nod] += fmin;
f[nod][tr[nod]] -= fmin;
}
flow += fmin;
}
out<<flow;
return 0;
}