스타게이트

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

요약
최대 600만 개의 행성에 대해 등차수열로 지정된 쌍들을 배치로 연결하거나 연결 여부를 질의하는 union-find 구조를 구현합니다.
난이도

보통10점 중 6점

유형
유니온 파인드, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

오래전, 아주 먼 은하계에서 한 진보된 문명이 태양계 사이를 순간 이동하는 방법을 발견하고, 멀리 떨어진 행성들을 연결하는 스타게이트 쌍을 건설하기 시작했다. 그 연결망이 매우 복잡해져서 어떤 세계들이 서로 연결되어 있는지 관리하는 데 도움이 필요하게 되었다.

시스템들의 연결 정보를 관리하는 프로그램을 작성하여라. 두 행성 AA와 BB는, 둘 사이에 직접 연결된 스타게이트가 있거나, P1=AP_1 = A이고 Pn=BP_n = B이며 모든 k∈{2,…,n}k \in \{2, \ldots, n\}에 대해 Pk−1P_{k-1}과 PkP_k가 직접 연결되어 있는 행성 열 P1,P2,…,PnP_1, P_2, \ldots, P_n이 존재하면 '연결되어 있다'고 한다. 모든 연결은 양방향이며, 두 행성 사이에 여러 개의 경로가 있을 수 있다.

입력

입력은 하나 이상의 데이터 집합으로 이루어지며, 빈 줄은 없다. 각 명령은 한 줄에 하나씩 주어지고, 대문자 또는 소문자 'D', 'C', 'Q' 중 한 글자로 시작한 뒤 11개에서 55개의 정수가 이어진다.

  • 'D'(define)는 정수 NN (N≤6000000N \le 6000000) 하나를 받는다. 11번부터 NN번까지 번호가 매겨진 행성들로 이루어지고 연결이 하나도 없는 새로운 데이터 집합을 시작한다.
  • 'C'(connect)는 하나 이상의 행성 쌍을 연결한다.
  • 'Q'(query)는 하나 이상의 행성 쌍이 연결되어 있는지 묻는다.

'C'와 'Q' 명령(아래에서는 'X'로 표기)은 같은 인자 형식을 공유한다.

  • X src dst — 한 쌍 (src,dst)(src, dst).
  • X src dst nnn — nnnnnn개의 쌍 (src,dst),(src,dst+1),…,(src,dst+nnn−1)(src, dst), (src, dst+1), \ldots, (src, dst+nnn-1). 예: X 1 100 3은 (1,100),(1,101),(1,102)(1,100), (1,101), (1,102)를 뜻한다.
  • X src dst nnn step — i=0,…,nnn−1i = 0, \ldots, nnn-1에 대한 nnnnnn개의 쌍 (src,dst+i⋅step)(src, dst + i \cdot step). 예: X 1 100 3 5는 (1,100),(1,105),(1,110)(1,100), (1,105), (1,110)을 뜻한다.
  • X src dst nnn dststep srcstep — i=0,…,nnn−1i = 0, \ldots, nnn-1에 대한 nnnnnn개의 쌍 (src+i⋅srcstep,dst+i⋅dststep)(src + i \cdot srcstep, dst + i \cdot dststep). 예: X 1 100 3 5 15는 (1,100),(16,105),(31,110)(1,100), (16,105), (31,110)을 뜻한다.

'C' 명령에서는 나열된 모든 쌍을 연결하고, 'Q' 명령에서는 나열된 모든 쌍을 검사한다. 참조되는 모든 행성 번호는 현재의 NN에 대해 11과 NN 사이에 있다.

출력

각 'Q'(query) 명령마다 한 줄씩, 입력 순서대로 출력한다. 각 줄에는 두 정수를 세 글자 ' - '(공백, 붙임표, 공백)로 구분하여 출력하는데, 먼저 그 질의에서 연결된 쌍의 개수를, 그다음 연결되지 않은 쌍의 개수를 출력한다. 뒤따르는 공백은 출력하지 않는다.

예제3

  1. 예제 1

    입력
    d 5
    C 1 3
    D 20
    q 1 3
    c 1 10 10
    Q 1 2 18 1 1
    
    예상 출력
    0 - 1
    9 - 9
    
  2. 예제 2

    입력
    D 6
    C 1 2
    C 2 3
    C 3 4
    Q 1 4
    Q 1 5
    Q 4 6
    
    예상 출력
    1 - 0
    0 - 1
    0 - 1
    
  3. 예제 3

    입력
    D 10
    C 1 2 4
    Q 1 2 4
    Q 2 3 3
    
    예상 출력
    4 - 0
    3 - 0