11437번: LCA 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정 www.acmicpc.net 코드 from collections import deque import sys input = sys.stdin.readline n = int(input()) graph = [[] for _ in range(n+1)] # 노드 간 연결 for _ in range(n-1): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) # 각 노드 레벨 구하기(BFS) level = [-1]*(n+..
LCA
3584번: 가장 가까운 공통 조상 루트가 있는 트리(rooted tree)가 주어지고, 그 트리 상의 두 정점이 주어질 때 그들의 가장 가까운 공통 조상(Nearest Common Anscestor)은 다음과 같이 정의됩니다. 두 노드의 가장 가까운 공통 조상은, 두 www.acmicpc.net 코드 from collections import deque import sys input = sys.stdin.readline for _ in range(int(input())): n = int(input()) parent = [-1]*(n+1) children = [[] for _ in range(n+1)] for _ in range(n-1): a, b = map(int, input().split()) par..
2233번: 사과나무 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 2,000)이 주어진다. 둘째 줄에는 벌레가 만드는 2×N자리의 이진수가 주어진다. 셋째 줄에는 썩은 사과의 위치를 나타내는 두 정수 X, Y가 주어진다. 이는 2×N자리 www.acmicpc.net 코드 import sys sys.setrecursionlimit(10**6) n = int(input()) binary = '9' + input() x, y = map(int, input().split()) parent = [[] for _ in range(n+1)] # 각 노드의 부모(가까운 노드부터) depth = [-1] * (n+1) # 각 노드의 깊이 removed = [] inout = [[] for _ in range(n+1)] de..