Baekjoon

[C/C++] 백준 3584번 - 가장 가까운 공통 조상

Study with Me! 2023. 8. 21. 16:14

 

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

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

www.acmicpc.net

#include <iostream>
using namespace std;
#define endl '\n'
#define SIZE 10001

int T, N;
int parent[SIZE];
bool visited[SIZE];

void initInput() {
    cin >> T;
}

void solve() {
    while (T--) {
        int u, v;
        cin >> N;

        for (int i = 1; i <= N; i++) {
            visited[i] = 0;
            parent[i] = i;
        }

        for (int i = 0; i < N - 1; i++) {
            cin >> u >> v;
            parent[v] = u;
        }

        cin >> u >> v;
        visited[u] = 1;

        while (u != parent[u]) {
            u = parent[u];
            visited[u] = 1;
        }
        while (1) {
            if (visited[v]) {
                cout << v << endl;
                break;
            }
            v = parent[v];
        }
    }
}

int main(void) {
    cout.tie(NULL); cin.tie(NULL); ios_base::sync_with_stdio(false);
    initInput();
    solve();

    return 0;
}