본문 바로가기

Algorithm/BAEKJOON

[BOJ] 3584번 가장 가까운 공통 조상 (C++)

728x90
반응형

https://www.acmicpc.net/problem/3584

 

3584번: 가장 가까운 공통 조상

루트가 있는 트리(rooted tree)가 주어지고, 그 트리 상의 두 정점이 주어질 때 그들의 가장 가까운 공통 조상(Nearest Common Anscestor)은 다음과 같이 정의됩니다. 두 노드의 가장 가까운 공통 조상은, 두

www.acmicpc.net

 

#include <iostream>
using namespace std;

int parent[10001];
bool visited[10001];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	
	int t;
	cin >> t;
	for(int j = 0; j < t; j++){
		int n;
		cin >> n;
		// 초기화
		for(int i = 1; i <= n; i++){
			visited[i] = false;
			parent[i] = i;
		}
		// 간선 정보 입력
		for(int i = 0; i < n - 1; i++){
			int a, b;
			cin >> a >> b;
			parent[b] = a;
		}
		// 공통 조상 찾기
		int u, v;
		cin >> u >> v;
		visited[u] = true;
		while(u != parent[u]){
			u = parent[u];
			visited[u] = true;
		}
		while(true){
			if(visited[v]){
				cout << v << endl;
				break;
			}
			v = parent[v];
		}
	}
	return 0;
}

 

 

두 노드 u, v를 입력받으면 u부터 루트 노드까지 올라가면서 방문 표시를 한다. v에서 위로 거슬러 올라갈 때 그곳이 u가 방문했던 곳이라면 최소 공통 조상이다.

728x90
반응형

'Algorithm > BAEKJOON' 카테고리의 다른 글

[BOJ] 1761번 정점들의 거리 (C++)  (0) 2023.03.17
[BOJ] 11437번 LCA (C++)  (0) 2023.03.17
[BOJ] 1563번 개근상 (C++)  (0) 2023.01.22
[BOJ] 5567번 결혼식 (C++)  (1) 2022.11.12
[BOJ] 5502번 팰린드롬 (C++)  (0) 2022.11.11