출처: https://3months.tistory.com/307 [Deep Play]

백준/Tree

[BOJ] 11812 K진 트리 C++

코딩하는 랄뚜기 2021. 8. 13. 00:25

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

 

11812번: K진 트리

첫째 줄에 N (1 ≤ N ≤ 1015)과 K (1 ≤ K ≤ 1 000), 그리고 거리를 구해야 하는 노드 쌍의 개수 Q (1 ≤ Q ≤ 100 000)가 주어진다. 다음 Q개 줄에는 거리를 구해야 하는 두 노드 x와 y가 주어진다. (1 ≤ x, y

www.acmicpc.net

오랜만에 보는 매우 쉬운 문제. 자식 노드를 N이라고 할 때, 부모 노드는 (N-1)/K라는 것을 이용하면 금방 풀린다.

단, 출력이 많으므로 ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);을 하는 것을 잊지말자!(개고생함)

#include <iostream>
using namespace std;
long long N,K,Q;
int main(){
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);
    cin>>N>>K>>Q;
    long long A,B;
    while(Q--){
        long long cnt=0;
        cin>>A>>B;
        if(K==1){
            cout<<abs(A-B)<<'\n';
            continue;
        }
        A--;B--;
        while(A!=B){
            if(A>B){
                A=(A-1)/K;
            }else if(A<B){
                B=(B-1)/K;
            }
            cnt++;
        }
        cout<<cnt<<'\n';
    }
    return 0;
}

'백준 > Tree' 카테고리의 다른 글

[BOJ] 5639 이진 검색 트리  (0) 2022.02.18
[BOJ] 4256 트리 C++  (0) 2021.08.11
[BOJ] 19581 두 번째 트리의 지름 C++  (0) 2021.08.09
[BOJ] 1167 트리의 지름 C++  (0) 2021.08.09
[BOJ] 1655 가운데를 말해요 C++  (0) 2021.08.05