트리와 쿼리 17

아직 제출이 없습니다시간 제한2초메모리 제한1024 MB

문제

NN개의 정점으로 이루어진 트리가 있다. 정점은 1번부터 NN번까지 번호가 매겨져 있고, 1번 정점은 루트이다. 각 정점 ii에는 정수 A\[i]A\[i]가 저장되어 있다. 가장 처음에 A\[i]A\[i]는 0이다.

다음과 같은 쿼리를 수행해야 한다.

  • 1 u: 정점 uu를 루트로 하는 서브 트리의 모든 정점 iiA\[i]A\[i]에 1을 더한다.
  • 2 u v: 정점 uu에서 정점 vv로 가는 유일한 최단 경로에 있는 모든 정점 iiA\[i]A\[i]에 1을 더한다. uuvv는 같을 수도 있다.

각각의 쿼리를 수행한 후 _y=1NA\[y]×dist(x,y)\sum\_{y = 1}^{N} A\[y] \times dist(x, y) 의 값을 가장 작게 만드는 정점 xx를 출력한다. dist(x,y)dist(x, y)xx에서 yy로 가는 경로에 존재하는 간선의 개수와 같다. 가능한 정점 x가 여러가지면, 루트에서 거리가 가장 가까운 정점을 출력한다. 그러한 정점은 항상 유일하다는 것을 증명할 수 있다.

입력

첫째 줄에 NN이 주어진다. (2N100,0002 \le N \le 100\\,000)

다음 N1N-1개의 줄에는 트리의 간선이 주어진다. 각 줄은 공백으로 구분된 두 정수 uuvv가 주어지고, 정점 uu와 정점 vv를 연결하는 간선을 의미한다. (1u,vN,uv1 \le u, v \le N, u \neq v)

다음 줄에는 수행해야 하는 쿼리의 개수 QQ가 주어진다. (1Q100,0001 \le Q \le 100\\,000).

다음 QQ개의 줄에는 쿼리가 한 줄에 하나씩 주어지며, 쿼리는 다음과 같은 형식이다.

  • 1 u (1uN1 \le u \le N)
  • 2 u v (1u,vN1 \le u, v \le N)

출력

쿼리를 수행한 후 출력해야 하는 값을 Q개의 줄에 순서대로 출력한다.