만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

어지러운 트리

시간 제한1초메모리 제한1024 MB

요약
루트를 바꿀 수 있는 트리에서 현재 루트 기준으로 LCA가 주어진 노드인 정점 쌍의 개수를 구하는 문제입니다.
난이도

보통10점 중 7점

유형
트리, DFS, 수학
정답자
아직 제출이 없습니다

문제

호반우가 키우던 애완용 트리가 병에 걸려 어지럼증을 앓고 있다. 트리는 어지러운 탓에 루트를 계속 바꿔 가며 균형을 잡는다. 호반우는 신기한 나머지 트리에게 아래 쿼리를 물어봤지만, 트리는 어지러워서 제대로 답하지 못했다. 이 트리를 위해 답을 대신 구해 주자.

문제

입력으로 루트가 1번 노드인 노드 NN개짜리 트리가 주어진다. 트리의 노드는 1번부터 NN번까지 번호가 붙어 있다. 아래 쿼리가 QQ번 주어질 때, 각 쿼리를 해결하는 프로그램을 작성하라.

  • 1 x: 루트 노드를 xx번 노드로 바꾼다.
  • 2 x: LCA(a,b)=xLCA(a, b) = x번 노드인 (a,b)(a, b) 쌍의 가능한 경우의 수를 출력한다. (a,b)(a, b)와 (b,a)(b, a)는 같은 순서쌍으로 본다. (a≠ba \neq b)

입력

첫 번째 줄에 NN, QQ가 공백으로 구분되어 주어진다. (1≤N≤200 000,1≤Q≤200 000)(1 \le N \le 200\,000, 1 \le Q \le 200\,000)

두 번째 줄부터 NN번째 줄까지는 간선으로 연결된 두 노드의 번호 aa, bb가 공백으로 구분되어 주어진다. (1≤a,b≤N)(1 \le a, b \le N)

N+1N+1번째 줄부터 N+QN+Q번째 줄까지 위에서 설명한 쿼리가 주어진다.

출력

2번 쿼리가 주어질 때마다 그 답을 한 줄에 하나씩, 주어진 순서대로 출력한다. 2번 쿼리는 하나 이상 주어진다.

힌트

LCA는 트리의 최소 공통 조상(Lowest Common Ancestor)이다. aa와 bb의 LCA는 aa와 bb를 모두 자손으로 가지면서 깊이가 가장 깊은 노드이다.

예제1

  1. 예제 1

    입력
    6 4
    1 2
    2 3
    1 4
    5 2
    4 6
    2 2
    2 1
    1 4
    2 1
    
    예상 출력
    3
    11
    3