import math# 이해법# 첫번쨰 build로 계속 타고 들어가서 끝에 도달# 이분법으로 범위를 쪼게서 들어왔음을 고려# 마지막에선 좌 우 하나씩만 범위를 가져올거기 때문에# 두번째 build로 들어가서 두번째 값을 넣어주곤 나옴# 두 build의 연산이 끝났기 때문에 부모 node에 합을 넣어줌# 예를들어 0~20 범위일때# 0~20 -> 0~10, 11~20# 0~10 -> 0~5, 6~10# 0~5 -> 0~2, 2~5# 0~2 -> 0~1, 2# 0~1 -> 0, 1# 0, 1 찍고 합처리# 2찍고 합처리# 2~5 시작# 2~5 -> 2~3, 3~4# 2~3 -> 2, 3# 2, 3 찍고 합처리# 3~4 -> 3, 4# 3, 4 찍고 합처리# 두 합을 더해줌# 위의 0~2, 2~5 마지막에 ..
코테/Algorithm & 방식
import heapqdef prim(n, graph): visited = set() pq = [(0, 0)] mst_cost = 0 while pq: weight, node = heapq.heappop(pq) if node in visited: continue visited.add(node) mst_cost += weight for neighbor, w in graph[node]: if neighbor not in visited: heapq.heappush(pq, (w, neighbor)) return mst_costgraph = {0: [(1, 1..

from collections import dequev, e = map(int, input().split())indegree = [0] * (v + 1)graph = [[] for i in range(v + 1)]for _ in range(e): a, b = map(int, input().split()) graph[a].append(b) indegree[b] += 1def topology_sort(): result = [] q = deque() for i in range(1, v + 1): if indegree[i] == 0: q.append(i) while q: now = q.popleft() result.a..

def find_parent(parent, x): if parent[x] != x: return find_parent(parent, parent[x]) return parent[x]def union_parent(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a

서로소 집합 알고리즘def find_parent(parent, x): if parent[x] != x: return find_parent(parent, parent[x]) return parent[x]def union_parent(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a 서로소 집합 사이클 판별def find_parent(parent, x): if parent[x] != x: return find_parent(parent, parent[x]) return parent[x]def union_parent(parent, a, b): a = fin..

INF = int(1e9)n = int(input())m = int(input())graph = [[INF] * (n + 1) for _ in range(n + 1)]for a in range(1, n + 1): for b in range(1, n + 1): if a == b: graph[a][b] = 0for _ in range(m): a, b, c = map(int, input().split()) graph[a][b] = cfor k in range(1, n + 1): for a in range(1, n + 1): for b in range(1, n + 1): graph[a][b] = min(graph[a][b], ..