애벌레와 트리

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

요약
트리 위에서 경로를 차지한 애벌레가 머리와 꼬리를 한 칸씩 움직여 주어진 머리와 꼬리 위치에 도달할 수 있는지 각 쿼리마다 판정한다.
난이도

어려움10점 중 8점

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

문제

NN개의 정점으로 이루어진 트리가 있다. 트리의 각 정점은 11번부터 NN번까지 번호가 매겨져 있고, ii번째 간선은 u_iu\_i번 정점과 v_iv\_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번 정점에 위치한 초기 상태의 애벌레가 00번 이상의 이동을 통해 머리와 꼬리가 각각 h′h'번 정점과 t′t'번 정점에 위치하게끔 할 수 있는가?

입력

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

다음 N−1N-1개의 줄 중 ii번째 줄에 두 개의 정수 u_iu\_i, v_iv\_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≤u_i,v_i≤N1\leq u\_i,v\_i \leq N
  • u_i≠v_iu\_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