해설
어떤 정점 를 루트로 정하면, 의 모든 이웃은 의 자식이 된다. 따라서 차수가 이상인 정점을 루트로 정하면 이진 트리가 될 수 없다.
어떤 정점을 루트로 정해도 이진 트리라는 조건으로부터 모든 정점의 차수는 이하이다. 연결된 트리에서 모든 정점의 차수가 이하이면 트리는 하나의 경로이다.
경로의 한쪽 끝점부터 정점을 순서대로 나열한다. 정점 의 위치를 라 하자. 현재 루트의 위치를 , 쿼리에서 주어진 정점 의 위치를 라 하자.
흰색 정점의 개수를 관리하는 Fenwick tree를 경로 순서 위에 만든다. 를 경로의 첫 번째 정점부터 번째 정점까지의 흰색 정점 수라고 하자.
이면 현재 루트는 의 오른쪽에 있다. 따라서 의 서브트리는 구간 이고, 부터 루트까지의 경로는 구간 이다.
이면 현재 루트는 의 왼쪽에 있다. 따라서 의 서브트리는 구간 이고, 부터 루트까지의 경로는 구간 이다.
이면 가 현재 루트이다. 이때 서브트리는 전체 트리이고, 경로에는 만 포함된다.
1번 쿼리는 현재 루트의 위치만 바꾸면 된다. 2번 쿼리는 Fenwick tree의 한 위치에 또는 을 더한다. 3번 쿼리는 위 식을 이용해 구간 합을 계산한다.
경로 순서를 구하는 데 , Fenwick tree를 만드는 데 이 걸린다. 각 쿼리는 에 처리되므로 전체 시간 복잡도는 이고, 공간 복잡도는 이다.
Solution written by GPT5.6