Between

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

요약
각 쿼리마다 a에서 b로 가는 최단경로 중 주어진 정점을 모두 지나는 최단경로가 존재하는지 판정한다.
난이도

어려움10점 중 8점

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

문제

11부터 NN까지 번호가 붙은 NN개의 정점과, MM개의 간선으로 구성된 방향 무가중치 그래프가 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성해 보자.

  • aa bb kk p_1⋯p_kp\_1 \cdots p\_k: aa번 정점에서 bb번 정점으로 가는 최단경로가 존재하며, 이들 중 p_1,⋯ ,p_kp\_1, \cdots, p\_k번 정점을 모두 지나는 최단경로가 존재한다면 YES, 아니라면 NO를 출력한다. 이때, p_1,⋯ ,p_kp\_1, \cdots, p\_k를 순서대로 지날 필요는 없다.

입력

첫째 줄에 그래프의 정점의 개수 NN, 간선의 개수 MM이 공백으로 구분되어 주어진다. (2≤N≤2,000(2\le N\le 2\\,000; 1≤M≤20,000)1\le M\le 20\\,000)

다음 MM개의 줄에 정수 aa와 bb가 공백으로 구분되어 주어진다. 이는 aa번 정점에서 bb번 정점으로 향하는 단방향 간선이 존재함을 의미한다. (1≤a,b≤N(1\le a,b\le N; a≠b)a\neq b)

다음 줄에는 쿼리의 개수 QQ가 주어진다. (1≤Q≤10,000)(1\le Q\le 10\\,000)

다음 QQ개의 줄에 걸쳐 각 줄에는

  • 정점의 번호 aa, bb (1≤a,b≤N)(1\le a,b\le N)
  • 지나야 하는 정점의 개수 kk (0≤k≤N−2)(0\le k\le N - 2)
  • k>0k > 0인 경우, 지나야 하는 kk개의 정점의 번호 p_1,⋯ ,p_kp\_1, \cdots, p\_k (1≤p_i≤N(1\le p\_i\le N; aa, bb, p_1p\_1, ⋯\cdots, p_kp\_k는 모두 다르다.))

가 공백으로 구분되어 주어진다.

모든 쿼리의 kk의 합은 100,000100\\,000을 넘지 않는다.

출력

한 줄에 하나씩, 각각의 쿼리의 결과를 순서대로 출력한다.

예제2

  1. 예제 1

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

    입력
    4 2
    1 2
    4 3
    4
    1 2 0
    2 1 0
    1 3 0
    1 3 1 2
    
    예상 출력
    YES
    NO
    NO
    NO