Pagini recente » Cod sursa (job #44611) | Cod sursa (job #1399272) | Cod sursa (job #1910513) | Cod sursa (job #2603837) | Cod sursa (job #1824687)
#include <bits/stdc++.h>
#define Nmax 1001
#define inf 0x7fffffff
using namespace std;
FILE *fin = freopen("maxflow.in", "r", stdin);
FILE *fout = freopen("maxflow.out", "w", stdout);
int n, m;
int S, D, ans;
int c[Nmax][Nmax], f[Nmax][Nmax], r[Nmax][Nmax];
int deUnde[Nmax];
queue < int > Q;
void read()
{
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; ++ i)
{
int x, y, z;
scanf("%d %d %d", &x, &y, &z);
c[x][y] = r[x][y] = z;
}
S = 1;
D = n;
}
bool BFS(int S, int D)
{
memset(deUnde, 0, sizeof(deUnde));
Q.push(S);
deUnde[S] = S;
while (!Q.empty())
{
int x = Q.front(), i;
Q.pop();
for (i = 1; i <= n; ++ i)
if (r[x][i] > 0 && deUnde[i] == 0)
{
deUnde[i] = x;
Q.push(i);
}
}
return deUnde[D];
}
void solve()
{
ans = 0;
while (BFS(S, D))
{
int nod = D, cap = inf;
while (nod != S)
{
cap = min(cap, r[deUnde[nod]][nod]);
nod = deUnde[nod];
}
nod = D;
ans += cap;
while (nod != S)
{
f[deUnde[nod]][nod] += cap;
f[nod][deUnde[nod]] -= cap;
r[deUnde[nod]][nod] -= cap;
r[nod][deUnde[nod]] += cap;
nod = deUnde[nod];
}
}
}
void write()
{
printf("%d\n", ans);
}
int main()
{
read();
solve();
write();
return 0;
}