Pagini recente » Cod sursa (job #3284476) | Cod sursa (job #2363952) | Profil catu_bogdan_99 | Profil HurrycanE | Cod sursa (job #486205)
Cod sursa(job #486205)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define pb push_back
#define forit(it, v) for(__typeof(v.begin()) it = v.begin(); it != v.end(); ++it)
const int MAX_N = 1001;
const int INF = 0x3f3f3f3f;
int n, m, sol;
int c[MAX_N][MAX_N], f[MAX_N], up[MAX_N], q[MAX_N];
vector <int> v[MAX_N];
int bf()
{
memset(f, 0, sizeof(f));
memset(up, 0, sizeof(up));
memset(q, 0, sizeof(q));
f[1] = INF;
int l , r;
q[l = r = 1] = 1;
for (; l <= r; ++l)
{
int nod = q[l];
forit(it, v[nod])
if (c[nod][*it] && !f[*it])
{
f[*it] = min(f[nod], c[nod][*it]);
up[*it] = nod;
q[++r] = *it;
}
}
if (!f[n])
return 0;
sol += f[n];
for (int i = n; i != 1; i = up[i])
{
c[up[i]][i] -= f[n];
c[i][up[i]] += f[n];
}
return 1;
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; ++i)
{
int x, y, z;
scanf("%d %d %d", &x, &y, &z);
v[x].pb(y);
c[x][y] = z;
}
int c = 1;
while (c)
c = bf();
printf("%d\n", sol);
}