만드는 중입니다

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

모험가 길드

면접 대비

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

요약
길드를 같은 연합으로 묶고 모험가 수를 바꾸는 질의를 처리하며, 두 길드가 같은 연합이면 그 연합의 모험가 총합을 구합니다.
난이도

보통10점 중 4점

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

문제

1부터 NN까지 번호가 차례대로 매겨진 모험가 길드 NN개가 있다. 모험가는 길드에 자유롭게 가입하거나 탈퇴할 수 있다. 처음에는 각 길드가 하나씩 동맹을 이루고 있으므로, 동맹은 총 NN개이다.

길드 aa와 길드 bb가 동맹하면, 길드 aa가 속한 동맹과 길드 bb가 속한 동맹이 합쳐져 새로운 동맹이 된다. 길드들은 사이가 좋아서 한번 맺은 동맹은 해체되지 않는다.

모험가 길드 본부는 두 길드가 처음으로 같은 동맹에 속하게 될 때마다 이를 기리는 축하 파티를 연다. 축하 파티는 언제든지 열 수 있으며, 같은 두 길드가 파티를 여러 번 열기도 한다. 길드 aa와 길드 bb의 축하 파티에는 두 길드가 처음으로 같은 동맹에 속했을 때 그 동맹에 속한 길드들이 참여한다. 예산을 정하려면 파티에 참여할 인원수를 알아야 한다.

그 시점에 동맹에 속한 길드들을 g1,g2,…,gkg_1, g_2, \dots, g_k라고 하자. f(gi)f(g_i)를 축하 파티를 여는 현재 길드 gig_i에 속한 인원수라고 할 때, 참여 인원수는 f(g1)+f(g2)+⋯+f(gk)f(g_1) + f(g_2) + \dots + f(g_k)이다.

다음 쿼리를 순서대로 처리한다.

  • 11 ii xx: 모험가 길드 ii에 모험가 xx명이 가입한다. (1≤i≤N1 \le i \le N, 1≤x≤1091 \le x \le 10^9)
  • 22 ii xx: 모험가 길드 ii에서 모험가 xx명이 탈퇴한다. 모험가 길드 ii에 모험가 xx명 이상 있다는 것이 보장된다. (1≤i≤N1 \le i \le N, 1≤x≤1091 \le x \le 10^9)
  • 33 aa bb: 모험가 길드 aa와 bb가 동맹한다. (1≤a,b≤N1 \le a, b \le N, a≠ba \ne b)
  • 44 aa bb: 지금 길드 aa와 bb가 축하 파티를 열 때 참여할 인원수를 출력한다. 지금까지 길드 aa와 bb가 같은 동맹에 속한 적이 없으면 −1-1을 출력한다. (1≤a,b≤N1 \le a, b \le N, a≠ba \ne b)

입력

첫째 줄에 모험가 길드의 개수 NN (2≤N≤300 0002 \le N \le 300\,000)과 처리할 쿼리의 개수 QQ (1≤Q≤300 0001 \le Q \le 300\,000)이 주어진다.

둘째 줄에 각 모험가 길드의 초기 인원수 G1,G2,…,GNG_1, G_2, \dots, G_N이 주어진다. (1≤Gi≤1091 \le G_i \le 10^9)

셋째 줄부터 QQ개의 줄에 위에서 제시한 쿼리가 주어진다.

입력은 모두 정수이다.

출력

4번 쿼리마다 정답을 한 줄에 하나씩 출력한다.

예제3

  1. 예제 1

    입력
    4 8
    3 4 5 6
    3 1 2
    3 2 3
    3 3 4
    2 1 2
    4 1 2
    4 1 3
    2 2 3
    4 2 3
    
    예상 출력
    5
    10
    7
    
  2. 예제 2

    입력
    4 3
    3 4 5 6
    1 3 5
    4 1 2
    3 1 2
    
    예상 출력
    -1
    
  3. 예제 3

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