Cod sursa(job #2960359)

Utilizator avethegamerAveTheGamer avethegamer Data 4 ianuarie 2023 06:01:52
Problema Flux maxim Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.45 kb
# 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()))