그래프 곱셈

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

요약
두 그래프의 데카르트적, 텐서적, 강적 곱에서 G_11과 G_pq 사이 최단경로 길이를 묻는 쿼리에 답한다.
난이도

어려움10점 중 8점

유형
그래프, BFS, 최단 경로
정답자
아직 제출이 없습니다

문제

그래프 이론에서 두 그래프의 적(곱)연산은 여러 가지가 정의되어 있는데, 대표적으로는 데카르트적, 텐서적, 강적이 있다. 이들의 정의는 다음과 같다.

정점이 NN개인 그래프 AA의 정점을 A_iA\_i (1≤i≤N)(1 \leq i \leq N), 정점이 MM개인 그래프 BB의 정점을 B_iB\_i (1≤i≤M)(1 \leq i \leq M)라 하자. 이때, 두 그래프를 곱한 새로운 그래프 GG는 N×MN\times M개의 정점을 가진다. 각 정점에 다음과 같은 번호를 붙이자: G_11,G_12,⋯ ,G_1M,G_21,⋯ ,G_NMG\_{11}, G\_{12}, \cdots, G\_{1M}, G\_{21}, \cdots, G\_{NM}.

이때, 연산별로 간선은 다음과 같이 정의된다.

  • 데카르트적: 1≤i,j≤N1\leq i,j\leq N (i≠ji \neq j)에 대해 A_iA\_i와 A_jA\_j가 인접하다면 1≤k≤M1 \leq k \leq M에 대해 G_ikG\_{ik}와 G_jkG\_{jk}가 인접하고, 1≤i,j≤M1\leq i,j\leq M (i≠ji \neq j)에 대해 B_iB\_i와 B_jB\_j가 인접하다면 1≤k≤N1 \leq k \leq N에 대해 G_kiG\_{ki}와 G_kjG\_{kj}가 인접하다.
  • 텐서적: 1≤i,j≤N1\leq i,j\leq N, 1≤k,l≤M1\leq k,l\leq M (i≠ji\neq j, k≠lk\neq l)에 대해 A_iA\_i와 A_jA\_j가 인접하고 B_kB\_k와 B_lB\_l가 인접하다면 G_ikG\_{ik}와 G_jlG\_{jl}이 인접하다.
  • 강적: 1≤i,j≤N1\leq i,j\leq N, 1≤k,l≤M1\leq k,l\leq M에 대해 G_ikG\_{ik}와 G_jlG\_{jl}이 데카르트적에서 인접하거나 텐서적에서 인접하다면 인접하다.

예를 들어, 아래 그림 1에서 왼쪽 두 그래프를 데카르트적 연산하면 오른쪽 그래프의 9개 정점과 파란색 실선으로 된 간선, 텐서적 연산하면 9개 정점과 빨간색 점선으로 된 간선을 얻는다.

[그림 1] 데카르트적, 텐서적, 강적을 그림으로 나타낸 예시.

이때, 두 그래프 AA와 BB가 주어지면 이 그래프에 대해 다음과 같은 쿼리 QQ개에 대한 답을 출력하는 프로그램을 구현하시오.

  • 1 p q: 그래프 AA와 BB의 데카르트적 GG에 대해 두 정점 G_pqG\_{pq}와 G_11G\_{11} 사이의 최단경로의 길이를 출력하여라. 경로가 없다면 -1을 출력하여라.
  • 2 p q: 그래프 AA와 BB의 텐서적 GG에 대해 두 정점 G_pqG\_{pq}와 G_11G\_{11} 사이의 최단경로의 길이를 출력하여라. 경로가 없다면 -1을 출력하여라.
  • 3 p q: 그래프 AA와 BB의 강적 GG에 대해 두 정점 G_pqG\_{pq}와 G_11G\_{11} 사이의 최단경로의 길이를 출력하여라. 경로가 없다면 -1을 출력하여라.

입력

첫 번째 줄에 그래프 AA의 정점의 개수 NN과 간선의 개수 XX가 공백으로 구분되어 주어진다.

두 번째 줄부터 XX개의 줄 중 ii번째 줄에 그래프 AA의 ii번째 간선이 잇는 두 정점의 번호 u_iu\_i와 v_iv\_i가 공백으로 구분되어 주어진다.

그다음 줄에 그래프 BB의 정점의 개수 MM과 간선의 개수 YY가 공백으로 구분되어 주어진다.

그다음 줄부터 YY개의 줄 중 ii번째 줄에 그래프 BB의 ii번째 간선이 잇는 두 정점의 번호 u′_iu'\_i와 v′_iv'\_i가 공백으로 구분되어 주어진다.

그다음 줄에 쿼리의 개수 QQ가 주어진다.

그다음 줄부터 QQ개의 줄에 쿼리가 한 줄에 하나씩 주어진다. 쿼리의 형식은 지문을 참고하여라.

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

출력

각 QQ개의 쿼리에 대한 답을 한 줄에 하나씩 출력하여라.

제한

  • 2≤N,M≤200,0002 \leq N, M \leq 200\\,000
  • 1≤X≤min⁡(N(N−1)2,500,000)1 \leq X \leq \min\left(\cfrac{N\left(N-1\right)}{2}, 500\\,000\right)
  • 1≤Y≤min⁡(M(M−1)2,500,000)1 \leq Y \leq \min\left(\cfrac{M\left(M-1\right)}{2}, 500\\,000\right)
  • 1≤Q≤500,0001 \leq Q \leq 500\\,000
  • 각 쿼리에 대해, 1≤p≤N1 \leq p \leq N, 1≤q≤M1 \leq q \leq M
  • 1≤u_i,v_i≤N1 \leq u\_i, v\_i \leq N (1≤i≤X1 \leq i \leq X)
  • 1≤u′_i,v′_i≤M1 \leq u'\_i, v'\_i \leq M (1≤i≤Y1 \leq i \leq Y)
  • u_i≠v_iu\_i \neq v\_i (1≤i≤X1 \leq i \leq X)
  • u′_i≠v′_iu'\_i \neq v'\_i (1≤i≤Y1 \leq i \leq Y)
  • 1≤i,j≤X1 \leq i, j \leq X에 대해, i≠ji \neq j이면 u_i,v_i≠u_j,v_j\\{u\_i,v\_i\\} \neq \\{u\_j,v\_j\\}
  • 1≤i,j≤Y1 \leq i, j \leq Y에 대해, i≠ji \neq j이면 u′_i,v′_i≠u′_j,v′_j\\{u'\_i,v'\_i\\} \neq \\{u'\_j,v'\_j\\}

예제2

  1. 예제 1

    입력
    3 3
    1 2
    2 3
    3 1
    3 2
    1 2
    2 3
    4
    1 3 2
    2 2 3
    2 2 1
    3 2 2
    
    예상 출력
    2
    2
    2
    1
    
  2. 예제 2

    입력
    3 2
    1 2
    2 3
    3 1
    2 3
    4
    2 1 1
    2 1 3
    2 2 1
    2 3 2
    
    예상 출력
    0
    -1
    -1
    -1