아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

트리의 팔

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

요약
트리와 루트가 주어질 때, 루트에서 두 리프까지의 거리 합이 [W, V]에 들어오는 순서쌍의 개수를 각 쿼리마다 1e9+7로 나눈 나머지를 구한다.
난이도

보통10점 중 6점

유형
트리, DFS, 누적 합, 정렬
정답자
아직 제출이 없습니다

문제

트리에 팔을 만들어주자.

트리의 팔을 다음과 같이 정의하자.

  • 임의의 트리 TT에 대해 트리의 양팔은 루트 노드 RR에서 도달 가능한 리프노드 aa, bb 한 쌍을 의미한다. 즉, 트리의 양팔은 리프노드 순서쌍 (a,b)(a, b)이다.
  • 트리의 양팔이 (a,b)(a, b)일 때, 왼쪽 팔은 aa이고 오른쪽 팔은 bb이다.
  • 오른팔과 왼팔은 같을 수 있다. 즉, (a,a)(a, a)도 유효한 양팔이다.
  • 이때, 어떤 한쪽 팔의 길이는 루트 노드 RR에서부터의 최단 거리로 정의한다.

어떤 트리 TT가 주어졌을 때, 해당 트리가 가질 수 있는 양팔을 (a,b)(a, b)라고 했을 때, 양팔의 길이의 합이 WW이상 VV이하가 되는 순서쌍 (a,b)(a, b)의 개수를 구하는 QQ개의 쿼리를 처리해보자.

입력

첫 번째 줄에 트리의 정점 개수 NN, 루트 노드의 번호 RR이 주어진다. (2≤N≤300 000;1≤R≤N)(2 \le N \le 300\ 000; 1 \le R \le N)

두 번째 줄부터 N−1N - 1개의 줄에 걸쳐 연결된 두 정점 u,vu, v가 공백으로 구분되어 주어진다. (1≤u,v≤N)(1 \le u, v \le N)

N+2N + 2 번째 줄에는 처리해야할 쿼리의 개수 QQ가 주어진다. (1≤Q≤200 000)(1 \le Q \le 200\ 000)

N+3N + 3 번째 줄부터 한 줄에 쿼리가 하나씩 주어진다. 각 쿼리의 W,VW, V가 공백으로 구분되어 들어오는 형태이다. (1≤W≤V≤N)(1 \le W \le V \le N)

출력

양팔의 길이 합이 WW이상 VV이하가 되는 순서쌍 (a,b)(a, b)의 개수를 구해 1 000 000 0071\ 000\ 000\ 007로 나눈 나머지를 쿼리별로 한 줄마다 출력한다.

예제1

  1. 예제 1

    입력
    8 4
    1 4
    2 6
    3 4
    3 5
    1 7
    4 6
    4 8
    1
    3 4
    
    예상 출력
    15