만드는 중입니다

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

회전하는 톱니바퀴

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

요약
톱니가 트리 모양으로 연결된 상태에서 톱니 제거, 재배치, 회전을 처리합니다. 각 회전의 에너지와 최종 각도 합을 출력합니다.
난이도

어려움10점 중 8점

유형
트리, DFS, 유니온 파인드, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

보드 위에 톱니바퀴 N개가 있고, 번호는 1부터 N까지이다. 각 톱니바퀴에는 처음에 위쪽을 가리키는 화살표가 있다. 서로 맞닿은 톱니바퀴 쌍이 있을 수 있다. 톱니바퀴를 정점으로, 맞닿은 톱니바퀴 쌍을 간선으로 잇면 그 그래프는 트리이다. 예를 들어 아래 그림은 톱니바퀴 4개(N = 4)로 이루어진 배치이며, 2번 톱니바퀴가 나머지 모든 톱니바퀴와 맞닿아 있다.

표준 톱니바퀴 회전 규칙이 적용된다. 톱니바퀴 u가 톱니바퀴 v와 맞닿아 있고 u가 시계 방향으로 α도 회전하면, v는 반시계 방향으로 α도 회전한다. 반대의 경우도 같다.

Andi는 세 종류의 연산을 수행하려고 한다.

  1. 톱니바퀴를 보드 위 위치에서 뺀다.
  2. 톱니바퀴를 원래 위치에 다시 놓는다. Andi는 톱니바퀴를 뺐을 때와 같은 각도를 화살표가 가리키도록 놓는다. 이는 항상 가능하다고 가정한다. 톱니바퀴의 기계적인 측면은 고려할 필요가 없다.
  3. 톱니바퀴를 시계 방향으로 α도 회전시킨다.

Q번의 연산이 모두 끝난 뒤 톱니바퀴 u 화살표의 각도(시계 방향, 360으로 나눈 나머지)를 \delta_u라고 하자. Andi는 모든 u에 대한 \delta_u의 합을 알고 싶어 한다. 톱니바퀴를 돌리는 일은 힘이 많이 들기 때문에, Andi는 3번 연산마다 필요한 에너지도 알고 싶어 한다. 3번 연산의 에너지는 (회전하는 톱니바퀴 수) × (회전한 각도)로 정의한다.

입력

첫 줄에 톱니바퀴의 개수 N (1 ≤ N ≤ 100000)이 주어진다. 이후 N - 1개의 줄에 각각 두 정수 u v (1 ≤ u, v ≤ N; u ≠ v)가 주어지며, 톱니바퀴 u와 v가 서로 맞닿아 있음을 뜻한다. 맞닿은 톱니바퀴들은 트리를 이루는 것이 보장된다.

다음 줄에는 연산의 개수 Q (1 ≤ Q ≤ 100000)가 주어진다. 이후 Q개의 줄에는 다음 중 하나의 형식으로 연산이 주어진다.

  • 정수 두 개 1 x (1 ≤ x ≤ N): 톱니바퀴 x를 보드 위 위치에서 뺀다. x는 현재 보드 위에 있음이 보장된다.
  • 정수 두 개 2 x (1 ≤ x ≤ N): 톱니바퀴 x를 원래 위치에 다시 놓는다. x는 현재 보드 위에 없음이 보장된다.
  • 정수 세 개 3 x α (1 ≤ x ≤ N; 0 ≤ α ≤ 359): 톱니바퀴 x를 시계 방향으로 α도 회전시킨다. x는 현재 보드 위에 있음이 보장된다.

출력

입력 순서대로 3번 연산마다 그 회전에 필요한 에너지를 한 줄에 출력한다. 이후 모든 u에 대한 \delta_u의 합을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    4
    1 2
    2 3
    2 4
    8
    3 2 160
    1 2
    3 1 10
    3 3 10
    3 4 10
    2 2
    1 1
    3 3 15
    
    예상 출력
    640
    10
    10
    10
    45
    805