Cod sursa(job #3337213)

Utilizator stefan_15Salcianu Stefan Alexandru stefan_15 Data 27 ianuarie 2026 01:52:06
Problema Flux maxim Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.61 kb


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()