네트워크 연결

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

요약
두 클러스터를 합칠 때 항상 두 번째 클러스터의 중심을 새 중심으로 삼는 가중 합집합 연산을 수행하고, 각 회사에서 현재 클러스터 중심까지의 거리를 질의에 답하는 문제입니다.
난이도

보통10점 중 5점

유형
유니온 파인드, 구현, 배열
정답자
아직 제출이 없습니다

문제

종빈이는 11번부터 NN번까지 번호가 매겨진 NN개의 기업을 운영하는 아주 큰 그룹의 총수다. 처음에 각 기업은 서로 독립적인 자체 컴퓨팅·통신 센터를 가지고 있어, 각자 하나의 클러스터를 이루며 그 기업 자신이 자기 클러스터의 센터가 된다.

서비스 개선을 위해, 그룹의 CTO인 서현이는 여러 클러스터를 하나의 센터에서 관리할 수 있는 더 큰 클러스터로 합치는 다음과 같은 과정을 고안했다.

  1. 현재 어떤 클러스터 AA의 센터인 기업 II를 고른다.
  2. AA와 다른 클러스터 BB에 속한 기업 JJ를 고른다(B≠AB \neq A이며, JJ는 센터가 아니어도 된다).
  3. II와 JJ를 통신 라인으로 연결한다. 이 라인의 길이는 ∣I−J∣ mod 1000|I - J| \bmod 1000이다.
  4. 클러스터 AA와 BB는 하나의 새로운 클러스터로 합쳐지며, 새 클러스터의 센터는 BB의 센터가 된다.

이러한 병합이 진행되는 동안, 어떤 기업이 현재 자기 클러스터의 센터까지 라인을 따라 이동하는 거리(그 경로에 놓인 라인 길이의 총합)가 얼마인지에 대한 문의가 계속 들어온다. 병합 과정을 수행하면서 이러한 거리 질의에 답하는 프로그램을 작성하여라.

입력

입력은 여러 개의 테스트 케이스로 주어진다. 첫째 줄에는 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스는 기업의 수 NN (4≤N≤200004 \le N \le 20000)으로 시작한다. 그다음 여러 줄에 걸쳐 아래 두 가지 명령어 중 하나가 주어진다.

  • E I — 기업 II에서 현재 클러스터의 센터까지의 거리를 출력한다.
  • I I J — 센터 II를 기업 JJ에 연결한다(위에서 설명한 병합을 한 번 수행한다).

각 테스트 케이스는 한 글자 O로 끝난다. 각 테스트 케이스에서 명령어의 총 개수는 200000200000개를 넘지 않으며, 그중 I 명령어의 개수는 NN개보다 작다.

출력

각 E 명령어에 대해, 요청된 거리를 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    1
    4
    E 3
    I 3 1
    E 3
    I 1 2
    E 3
    I 2 4
    E 3
    O
    
    예상 출력
    0
    2
    3
    5
    
  2. 예제 2

    입력
    1
    1500
    E 1500
    I 1500 200
    E 1500
    I 200 1400
    E 1500
    E 200
    I 1400 5
    E 1500
    E 1400
    O
    
    예상 출력
    0
    300
    500
    200
    895
    395