# Maximum flow ```python= def bfs(C, F, s, t): queue = [s] paths = {s: []} if s == t: return paths[s] while queue: u = queue.pop(0) for v in range(len(C)): if (C[u][v] - F[u][v] > 0) and v not in paths: paths[v] = paths[u] + [(u,v)] if v==t: return paths[v] queue.append(v) return None def solution(entrances, exits, path): max = float("inf") n = len(path) s = n t = n+1 for row in range(n): path[row].append(0) path[row].append(max if row in exits else 0) n += 2 path.append([(max if x in entrances else 0) for x in range(n)]) path.append([0]*n) F = [[0]*n for i in range(n)] paths = bfs(path, F, s, t) while paths != None: flow = min(path[u][v] - F[u][v] for u,v in paths) for u,v in paths: F[u][v] += flow F[v][u] -= flow paths = bfs(path, F, s, t) return sum(F[s][i] for i in range(n)) if __name__ == "__main__": user_inputs = input().split(" ") n = int(user_inputs[0]) m = int(user_inputs[1]) C = [[0] * n for _ in range(n)] entrances = [i for i in range(0, n)] exits = [i for i in range(0, n)] for _m in range(m): user_inputs = input().split(" ") u = int(user_inputs[0])-1 v = int(user_inputs[1])-1 c = int(user_inputs[2]) try: entrances.remove(v) except: pass try: exits.remove(u) except: pass C[u][v] = c # for i, c in enumerate(C): # count = 0 # count_col = 0 # for j, num in enumerate(c): # # print(num) # # print(C[j][i]) # if num == 0: # count += 1 # if C[j][i] == 0: # count_col += 1 # if count == len(c): # exits.append(i) # if count_col == n: # entrances.append(i) # for j in range(0, n): # count = 0 # for i in range(0, n): # # print(C[i][j]) # if C[i][j] == 0: # count += 1 # if count == n: # entrances.append(j) # print(entrances) # print(exits) # graph = [ # [0, 0, 4, 6, 0, 0], # [0, 0, 5, 2, 0, 0], # [0, 0, 0, 0, 4, 4], # [0, 0, 0, 0, 6, 6], # [0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0], # ] # print(C) maximumFlow = solution(entrances, exits, C) print(maximumFlow) ```