Pagini recente » Cod sursa (job #541429) | Cod sursa (job #1967973) | Cod sursa (job #890197) | Cod sursa (job #1770703) | Cod sursa (job #1759447)
#include <bits/stdc++.h>
using namespace std;
#define FILE_IO
int N, M;
int h[1005], e[1005];
int fl[1005][1005];
int cp[1005][1005];
vector <int> edg[1005];
int main()
{
#ifdef FILE_IO
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
#endif
scanf("%d%d", &N, &M);
for(int i = 1; i <= M; i++)
{
int x, y, cap;
scanf("%d%d%d", &x, &y, &cap);
cp[x][y] = cap;
cp[y][x] = 0;
edg[x].push_back(y);
edg[y].push_back(x);
}
for(auto nxt: edg[1])
{
e[nxt] = cp[1][nxt];
fl[1][nxt] = cp[1][nxt];
cp[nxt][1] = cp[1][nxt];
cp[1][nxt] = 0;
}
h[1] = N;
int ok = 1;
while(ok)
{
ok = 0;
for(int i = 2; i < N; i++)
if(e[i] > 0)
{
for(auto nxt: edg[i])
if(h[i] == h[nxt] + 1 && cp[i][nxt] != 0)
{
int psh = min(e[i], cp[i][nxt]);
cp[i][nxt] -= psh;
cp[nxt][i] += psh;
e[i] -= psh;
e[nxt] += psh;
ok = 1;
}
if(ok) break;
}
if(ok) continue;
for(int i = 2; i < N; i++)
if(e[i] > 0)
{
int hmin = 2 * N;
for(auto nxt: edg[i])
if(cp[i][nxt] > 0)
hmin = min(hmin, h[nxt]);
h[i] = hmin + 1;
ok = 1;
break;
}
}
printf("%d\n", e[N]);
return 0;
}