Coding Is My Life

코딩은 인생

728x90

LCA 2

[C++알고리즘][최소공통조상(LCA) 알고리즘]

최소 공통조상이란? 두 노드의 조상이 처음으로 같은 경우를 최소 공통 조상이라고 한다. 지금부터 최소 공통 조상을 구하는 알고리즘을 알아보도록 하겠다. 위와 같이 트리가 하나 있다. 여기서 1이 루트라 하고 각 깊이를 구하면 다음과 같다. 여기서 노드 3과 노드 8의 최소 공통 조상은 그림과 같이 노드 2인 것을 알 수 있다. 하나 더 예시를 보자면 노드 8과 노드 10의 최소 공통 조상은 노드 10인 것을 알 수 있다. 바로 본론으로 들어가자면 최소 공통 조상 알고리즘은 1. 두 노드의 깊이를 확인한다. 2. 만약 하나가 다른 노드보다 작다면 깊이-1을 해준다. 3. 만약 깊이가 같다면 두 노드 모드 깊이 -1를 해준다. 4. 깊이-1 해주면서 만약 노드가 같아지는 지점을 찾는다. 5. 같아지는 지점이..

그래프 이론 2020.11.30

[백준/C++][(1761번)정점들의 거리]

문제 https://www.acmicpc.net/problem/1761 1761번: 정점들의 거리 첫째 줄에 노드의 개수 N이 입력되고 다음 N-1개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에 M이 주어지고, 다음 M개의 줄에 거리를 알고 싶은 노드 쌍이 한 줄에 한 쌍씩 www.acmicpc.net 문제해결 1.벡터에 정점과 가중치를 입력받는다. 2.DFS를 통해서 각 노드들마다 부모와 깊이를 알아낸다. 3.LCA알고리즘을 실행한다 3-1. 만약 두 노드가 같으면 출력한다 3-2. 두 노드가 같지 않고 깊이가 같으면 두 노드 다 깊이-1로 이동한다. 3-3 한 노드가 다른노드보다 깊이가 크면 큰 노드가 깊이-1로 이동한다. 4. 두 노드가 같아 질때까지 반복한다. 코드 ide...

728x90