Skip to content

Commit 4f45fe1

Browse files
authored
Fix case with dist equal to None
1 parent f35a8d1 commit 4f45fe1

File tree

1 file changed

+5
-14
lines changed

1 file changed

+5
-14
lines changed

max-flow.md

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ def min_cost_max_flow(s, t):
351351
```python
352352
def flow_cost():
353353
edge_cost = lambda e: cost(e) * flow(e)
354-
return sum(map(edge_cost, network_edges())) / 2
354+
return sum(map(edge_cost, network_edges())) // 2
355355
```
356356

357357
Теперь перейдем к функции `remove_cycles`. В ней мы будем в цикле искать отрицательные циклы, пропускать по ним поток, устраняя их и тем самым уменьшая стоимость потока. Как только отрицательный цикл не найден, алгоритм можно завершать.
@@ -379,31 +379,22 @@ def remove_cycles(s):
379379
def find_cycle(s):
380380
dist[s] = 0
381381

382-
for i in range(n - 1):
382+
for i in range(n):
383383

384384
for e in network_edges():
385385
v = source(e)
386386
u = target(e)
387387
c = cost(e)
388388

389-
if available(e) == 0:
389+
if dist[v] is None or available(e) == 0:
390390
continue
391391

392392
if dist[u] is None or dist[u] > dist[v] + c:
393393
dist[u] = dist[v] + c
394394
pred[u] = e
395395

396-
for e in network_edges():
397-
v = source(e)
398-
u = target(e)
399-
c = cost(e)
400-
401-
if available(e) == 0:
402-
continue
403-
404-
if dist[u] is None or dist[u] > dist[v] + c:
405-
pred[u] = e
406-
return u
396+
if i + 1 == n:
397+
return u
407398

408399
return None
409400
```

0 commit comments

Comments
 (0)