Cod sursa(job #2962672)

Utilizator Eric24ERIC ALEXANDRU MOROSAN Eric24 Data 8 ianuarie 2023 22:39:22
Problema Flux maxim Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.44 kb
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)