아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

줄 세우기

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

요약
여러 줄을 끝과 끝으로 합치고, 같은 줄에 있는 두 사람 사이 구간의 번호 합을 구하는 질의를 처리한다.
난이도

보통10점 중 7점

유형
연결 리스트, 유니온 파인드, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

사람들이 일렬로 서 있는 NN개의 줄이 있다. 다음 두 가지의 질의가 주어진다.

  • 1 a b: aa와 bb가 같은 줄에 있다면 NO를 출력한다. 그렇지 않다면 YES를 출력하고 aa가 속한 줄과 bb가 속한 줄을 연결한다.

    • aa가 속한 줄의 마지막에 서 있는 사람과 bb가 속한 줄의 첫 번째 사람을 순서대로 연결한다.
    • 줄을 합칠 때 기존의 줄의 순서는 유지한다.
  • 2 a b: aa와 bb가 같은 줄에 있다면 aa와 bb 사이에 있는 사람들의 번호의 합을 출력한다. 그렇지 않다면 -1을 출력한다.

    • aa와 bb도 포함해서 계산한다.

위 질의를 해결하는 프로그램을 작성하자.

입력

첫째 줄에 사람들이 일렬로 서 있는 줄의 개수 NN이 주어진다. (1≤N≤200,000)(1 \leq N \leq 200\\,000)

둘째 줄부터 NN 개의 줄에 걸쳐 사람들이 일렬로 서 있는 각 줄의 정보가 주어진다. 각 줄의 처음에는 줄에 속한 사람의 수 L_iL\_i가 주어진다. 그다음에 각 줄에 속하는 사람의 번호 a_ija\_{ij}가 L_iL\_i 개만큼 공백으로 구분되어 주어진다. (1≤L_i, 1≤a_ij≤∑_i=1NL_i≤200,000)(1 \leq L\_i,\ 1 \leq a\_{ij} \leq \sum\_{i=1}^{N}L\_i \leq 200\\,000)

i≠xi \neq x이거나 j≠yj \neq y이면 a_ij≠a_xya\_{ij} \neq a\_{xy}이다. 즉, 모든 사람의 번호는 서로 다르다.

N+2N+2번째 줄에는 질의의 개수 QQ가 주어진다. (1≤Q≤200,000)(1 \leq Q \leq 200\\,000)

N+3N + 3번째 줄부터 QQ 개의 줄에 걸쳐 질의가 차례대로 주어진다.

입력으로 주어지는 모든 수는 정수이다.

출력

질의에 대한 답을 각 줄마다 차례로 출력한다.

예제2

  1. 예제 1

    입력
    3
    1 1
    2 2 3
    1 4
    7
    2 1 1
    1 1 2
    2 1 3
    2 3 4
    1 1 4
    1 3 4
    2 1 4
    
    예상 출력
    1
    YES
    6
    -1
    YES
    NO
    10
    
  2. 예제 2

    입력
    5
    1 3
    1 5
    1 4
    1 2
    1 1
    5
    1 3 5
    1 4 5
    1 1 2
    1 1 5
    2 2 3
    
    예상 출력
    YES
    YES
    YES
    YES
    9