만드는 중입니다

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

애벌레와 트리

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

요약
트리 위에서 머리와 꼬리가 각각 h, t에 있는 애벌레가 질의된 h', t'로 움직일 수 있는지 각 질의마다 판단합니다.
난이도

어려움10점 중 8점

유형
트리, 그래프, BFS
정답자
아직 제출이 없습니다

문제

NN개의 정점으로 이루어진 트리가 있다. 정점은 11번부터 NN번까지 번호가 매겨져 있고, ii번째 간선은 uiu_i번 정점과 viv_i번 정점을 잇는다. 이 트리 위에 애벌레가 한 마리 살고 있다. 처음에 애벌레의 머리는 hh번 정점에, 꼬리는 tt번 정점에 있다. 애벌레는 머리가 있는 정점, 꼬리가 있는 정점, 그리고 두 정점 사이 경로에 속한 모든 정점을 차지한다.

머리가 aa번 정점, 꼬리가 bb번 정점에 있을 때, 다음 조건을 모두 만족하는 a′a'와 b′b'를 골라 머리와 꼬리를 각각 a′a'번 정점과 b′b'번 정점으로 동시에 옮길 수 있다.

  • aa번 정점과 a′a'번 정점은 인접해 있고, bb번 정점과 b′b'번 정점은 인접해 있다.
  • a′a'번 정점과 b′b'번 정점 중 정확히 하나는 이동 전에 애벌레가 차지하지 않았던 정점이고, 나머지 하나는 이동 전에 애벌레가 차지했던 정점이다.

이동하더라도 애벌레가 차지하는 정점의 개수는 변하지 않는다.

QQ개의 쿼리가 주어진다. 각 쿼리는 h′h'와 t′t'로 주어진다. 머리가 hh번 정점, 꼬리가 tt번 정점에 있는 초기 상태의 애벌레가 0번 이상 이동해서 머리를 h′h'번 정점, 꼬리를 t′t'번 정점에 놓을 수 있는지 판정한다.

입력

첫 번째 줄에 세 정수 NN, hh, tt가 공백으로 구분되어 주어진다.

다음 N−1N-1개의 줄 중 ii번째 줄에는 정수 uiu_i와 viv_i가 공백으로 구분되어 주어진다.

다음 줄에 정수 QQ가 주어진다.

다음 QQ개의 줄에는 쿼리 정보인 두 정수 h′h'와 t′t'가 공백으로 구분되어 주어진다.

출력

QQ개의 줄에 걸쳐 답을 출력한다. ii번째 줄에는 ii번째 쿼리의 답이 가능하면 YES를, 불가능하면 NO를 출력한다.

제한

  • 2≤N≤1000002 \leq N \leq 100000
  • 1≤Q≤500001 \leq Q \leq 50000
  • 1≤ui,vi≤N1 \leq u_i, v_i \leq N
  • ui≠viu_i \ne v_i
  • 1≤h,t≤N1 \leq h, t \leq N
  • h≠th \ne t
  • 1≤h′,t′≤N1 \leq h', t' \leq N
  • h′h'와 t′t' 사이의 거리는 hh와 tt 사이의 거리와 같다.

예제1

  1. 예제 1

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