Pagini recente » Cod sursa (job #245794) | Cod sursa (job #2039344) | Cod sursa (job #146212) | Cod sursa (job #497774) | Cod sursa (job #2960359)
# Citirea datelor
with open("maxflow.in", 'r') as fin:
nr_noduri, nr_muchii = map(int, fin.readline().split())
graph = {i: [] for i in range(1, nr_noduri + 1)}
capacity = {i: {j: 0 for j in range(1, nr_noduri + 1)} for i in range(1, nr_noduri + 1)}
parent = [None] * (nr_noduri + 1)
for _ in range(nr_muchii):
x, y, c = map(int, fin.readline().split())
graph[x].append(y)
capacity[x][y] = c
def bfs():
global graph, capacity, parent
visited = [False] * (nr_noduri + 1)
q = [1]
visited[1] = True
while q:
node = q.pop(0)
for neighbour in graph[node]:
if not visited[neighbour] and capacity[node][neighbour] > 0:
q.append(neighbour)
visited[neighbour] = True
parent[neighbour] = node
return True if visited[nr_noduri] else False
def edmonds_karp():
global graph, capacity, parent
max_flow = 0
while bfs():
path_flow = float("inf")
nod = nr_noduri
while nod != 1:
path_flow = min(path_flow, capacity[parent[nod]][nod])
nod = parent[nod]
max_flow += path_flow
nod = nr_noduri
while nod != 1:
tata = parent[nod]
capacity[tata][nod] -= path_flow
nod = tata
return max_flow
if __name__ == '__main__':
print(edmonds_karp())
with open("maxflow.out", 'w') as fout:
fout.write(str(edmonds_karp()))