Pagini recente » Cod sursa (job #993482) | Cod sursa (job #1577414) | Cod sursa (job #555001) | Cod sursa (job #588074) | Cod sursa (job #2962672)
from collections import deque
def bfs():
for i in range(1, n+1):
tt[i] = 0
vizitat[i] = 0
vizitat[1] = 1
q = deque()
q.append(1)
while q:
actual = q.popleft()
for nod in adiacenta[actual]:
if vizitat[nod] == 0 and rezidual[actual][nod] > 0:
q.append(nod)
vizitat[nod] = 1
tt[nod] = actual
if nod == n:
return True
return False
def getFlow():
flow = 200000
ind = n
while ind != 1:
flow = min(flow, rezidual[tt[ind]][ind])
ind = tt[ind]
return flow
def update(flow):
ind = n
while ind != 1:
rezidual[ind][tt[ind]] += flow
rezidual[tt[ind]][ind] -= flow
ind = tt[ind]
with open("maxflow.in", "r") as f:
n, m = f.readline().split()
n, m = int(n), int(m)
tt = [0 for _ in range(n + 1)]
vizitat = [0 for _ in range(n + 1)]
adiacenta = [[] for _ in range(n+1)]
rezidual = [[0 for _ in range(n+1)] for _ in range(n+1)]
for _ in range(m):
x, y, z = f.readline().split()
rezidual[int(x)][int(y)] = int(z)
adiacenta[int(x)].append(int(y))
adiacenta[int(y)].append(int(x))
final = 0
while bfs():
actual_flow = getFlow()
final += actual_flow
update(actual_flow)
with open("maxflow.out", 'w') as g:
print(final, file=g)