만드는 중입니다

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

그래프 곱셈

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

요약
두 그래프 A, B가 주어질 때 카르테시안 곱, 텐서 곱, 강한 곱에서 G11부터 지정한 정점까지의 최단 거리를 쿼리마다 구합니다.
난이도

보통10점 중 6점

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

문제

그래프 이론에서 두 그래프의 곱은 여러 가지로 정의된다. 대표적으로 데카르트 곱, 텐서 곱, 강한 곱이 있다. 각 곱의 정의는 다음과 같다.

정점이 NN개인 그래프 AA의 정점을 AiA_i (1≤i≤N1 \leq i \leq N)라 하고, 정점이 MM개인 그래프 BB의 정점을 BiB_i (1≤i≤M1 \leq i \leq M)라 하자. 두 그래프를 곱한 그래프 GG는 N×MN \times M개의 정점을 가진다. 각 정점에는 G11,G12,⋯ ,G1M,G21,⋯ ,GNMG_{11}, G_{12}, \cdots, G_{1M}, G_{21}, \cdots, G_{NM}과 같이 번호를 붙인다.

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

  • 데카르트 곱: 1≤i,j≤N1 \leq i,j \leq N (i≠ji \neq j)에 대해 AiA_i와 AjA_j가 인접하면, 모든 1≤k≤M1 \leq k \leq M에 대해 GikG_{ik}와 GjkG_{jk}가 인접한다. 1≤i,j≤M1 \leq i,j \leq M (i≠ji \neq j)에 대해 BiB_i와 BjB_j가 인접하면, 모든 1≤k≤N1 \leq k \leq N에 대해 GkiG_{ki}와 GkjG_{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)에 대해 AiA_i와 AjA_j가 인접하고 BkB_k와 BlB_l이 인접하면, GikG_{ik}와 GjlG_{jl}이 인접한다.
  • 강한 곱: 1≤i,j≤N1 \leq i,j \leq N, 1≤k,l≤M1 \leq k,l \leq M에 대해 GikG_{ik}와 GjlG_{jl}이 데카르트 곱에서 인접하거나 텐서 곱에서 인접하면, 두 정점은 인접한다.

그림 1은 예시이다. 왼쪽의 두 그래프를 데카르트 곱하면 오른쪽의 9개 정점과 파란색 실선 간선이 나온다. 텐서 곱하면 같은 9개 정점과 빨간색 점선 간선이 나온다.

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

두 그래프 AA와 BB가 주어졌을 때, 다음 형식의 쿼리 QQ개에 답하는 프로그램을 작성하시오.

  • 1 p q: AA와 BB의 데카르트 곱 GG에서 정점 GpqG_{pq}와 G11G_{11} 사이의 최단 경로 길이를 출력한다. 경로가 없으면 -1을 출력한다.
  • 2 p q: AA와 BB의 텐서 곱 GG에서 정점 GpqG_{pq}와 G11G_{11} 사이의 최단 경로 길이를 출력한다. 경로가 없으면 -1을 출력한다.
  • 3 p q: AA와 BB의 강한 곱 GG에서 정점 GpqG_{pq}와 G11G_{11} 사이의 최단 경로 길이를 출력한다. 경로가 없으면 -1을 출력한다.

입력

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

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

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

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

그다음 줄에 쿼리 개수 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≤ui,vi≤N1 \leq u_i, v_i \leq N (1≤i≤X1 \leq i \leq X)
  • 1≤ui′,vi′≤M1 \leq u'_i, v'_i \leq M (1≤i≤Y1 \leq i \leq Y)
  • ui≠viu_i \neq v_i (1≤i≤X1 \leq i \leq X)
  • ui′≠vi′u'_i \neq v'_i (1≤i≤Y1 \leq i \leq Y)
  • 1≤i,j≤X1 \leq i, j \leq X에 대해 i≠ji \neq j이면 {ui,vi}≠{uj,vj}\{u_i,v_i\} \neq \{u_j,v_j\}
  • 1≤i,j≤Y1 \leq i, j \leq Y에 대해 i≠ji \neq j이면 {ui′,vi′}≠{uj′,vj′}\{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