만드는 중입니다

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

트리와 쿼리

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

요약
트리와 여러 개의 정점 집합 S가 주어질 때, 경로 위의 정점이 모두 S에 속하는 정점 쌍의 개수를 구합니다.
난이도

보통10점 중 6점

유형
트리, 정렬, 구현
정답자
아직 제출이 없습니다

문제

정점이 11부터 NN까지 NN개인 트리가 주어진다. ii번째 간선은 서로 다른 두 정점 AiA_i, BiB_i를 잇는다. (1≤i≤N−11 \le i \le N-1)

NN개의 정점 중 몇 개를 골라, 고른 정점들의 집합을 S={s1,s2,…,sK}S = \{s_1, s_2, \dots, s_K\}라고 하자. si=vs_i = v를 만족하는 ii (1≤i≤K1 \le i \le K)가 있으면, 정점 vv가 SS에 속한다고 한다.

SS에 속하는 서로 다른 두 정점 uu, vv에 대하여, SS에 속한 정점만 지나서 트리 위에서 uu와 vv 사이를 오갈 수 있으면, "uu와 vv는 SS 위에서 연결되어 있다"고 한다.

예를 들어, 아래와 같은 트리를 보자. (N=7N = 7)

K=6K = 6이고 S={1,2,3,4,5,6}S = \{1, 2, 3, 4, 5, 6\}이면, "11과 22", "33과 55", "44와 66"은 각각 SS 위에서 연결되어 있다. 그러나 "11과 66", "22와 77"은 SS 위에서 연결되어 있지 않다.

다음 조건을 모두 만족하는 정점 쌍 (u,v)(u, v)의 개수를 SS의 연결 강도라고 한다.

  1. uu와 vv는 서로 다른 두 정점이다.
  2. 1≤u<v≤N1 \le u < v \le N이다.
  3. uu와 vv는 SS 위에서 연결되어 있다.

고른 정점 집합 SS가 주어질 때, SS의 연결 강도를 계산하는 프로그램을 작성하라. 이러한 질의 QQ개에 모두 답해야 한다.

입력

첫 번째 줄에 정수 NN이 주어진다.

다음 N−1N-1개의 줄에 각 간선의 정보가 주어진다. ii번째 줄에는 두 정수 AiA_i, BiB_i가 주어진다.

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

다음 QQ개의 줄에 각 질의가 주어진다. 각 줄은 정수 KK와 이어서 KK개의 정수 s1,…,sKs_1, \dots, s_K로 이루어진다.

출력

QQ개의 줄에 걸쳐 각 질의의 답을 순서대로 출력한다. ii번째 줄에는 ii번째 질의에서 주어진 SS의 연결 강도를 출력한다.

제한

  • 2≤N≤250 0002 \le N \le 250\,000
  • 1≤Q≤100 0001 \le Q \le 100\,000
  • 모든 ii (1≤i≤N−11 \le i \le N-1)에 대해, 1≤Ai≤N1 \le A_i \le N.
  • 모든 ii (1≤i≤N−11 \le i \le N-1)에 대해, 1≤Bi≤N1 \le B_i \le N.
  • 모든 ii (1≤i≤N−11 \le i \le N-1)에 대해, Ai≠BiA_i \ne B_i.
  • 주어지는 그래프는 트리이다.
  • 모든 질의에 대해, 1≤K≤N1 \le K \le N.
  • 각 질의에서 모든 ii (1≤i≤K1 \le i \le K)에 대해, 1≤si≤N1 \le s_i \le N.
  • 각 질의에서 고른 KK개의 정점 s1,…,sKs_1, \dots, s_K는 서로 다르다.
  • QQ개의 질의에서 주어지는 KK의 합은 1 000 0001\,000\,000 이하이다.

예제1

  1. 예제 1

    입력
    7
    1 2
    1 3
    1 5
    2 7
    4 6
    4 7
    6
    1 1
    2 1 2
    4 1 2 3 4
    5 1 2 4 6 7
    6 1 2 3 4 5 6
    7 1 2 3 4 5 6 7
    
    예상 출력
    0
    1
    3
    10
    7
    21