Pagini recente » Monitorul de evaluare | Cod sursa (job #3318325) | Cod sursa (job #3337119) | Cod sursa (job #3321677) | Cod sursa (job #3337216)
from collections import deque
def solve():
S, T = 1, n
max_flow=0
def BFS(S):
q= deque([S])
tata[:]=[-1] * (n+1)
tata[S]=-2
while q:
curr = q.popleft()
for el in adj_list[curr]:
if tata[el]==-1 and capacity[curr][el]>0:
tata[el]= curr
q.append(el)
if el == T:
return True
return False
while BFS(S):
path=float("inf")
curr = T
prev= tata[T]
while prev != S:
path= min(path, capacity[prev][curr])
prev = tata[prev]
curr= tata[curr]
path = min (path, capacity[prev][curr])
max_flow+= path
curr = T
prev= tata[T]
while prev != S:
capacity[prev][curr]-=path
capacity[curr][prev]+=path
prev = tata[prev]
curr= tata[curr]
capacity[prev][curr]-=path
capacity[curr][prev]+=path
with open("maxflow.out","w") as f:
f.write(str(max_flow))
if __name__ == "__main__":
with open("maxflow.in", "r") as f:
n, m = map (int, f.readline().strip().split())
adj_list=[[] for _ in range(n+1)]
capacity=[[0] * (n+1) for _ in range (n+1)]
for i in range (m):
x, y ,c = map(int, f.readline().strip().split())
adj_list[x].append(y)
adj_list[y].append(x)
capacity[x][y]+=c
# for line in capacity:
# print(*line)
tata=[-1] * (n+1)
solve()