PivotOJ

트리와 쿼리

시간 제한: 3000ms메모리 제한: 1024MB출처: KOI 2022 2차BOJ 25402

문제

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

NN개의 정점 중 몇 개를 골라, 그 고른 정점들을 S={s1,s2,…,sK}S = \{s_1, s_2, \dots , s_K\}라고 하자. 또한, si=vs_i = v를 만족하는 ii (1 ≤ i ≤ 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 &le; u < v &le; N.
  3. uu와 vv는 SS 위에서 연결되어 있다.

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

입력

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

다음 (N−1N - 1)개의 줄에 각 간선에 대한 정보가 주어진다. 이 중 ii (1 &le; i &le; N - 1)번째 줄에는 두 정수 AiA_i, BiB_i가 주어진다.

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

다음 QQ개의 줄에 각 질의에 대한 정보가 주어진다. 이 중 ii (1 &le; i &le; Q)번째 줄은 ii번째 질의를 나타내며, 정수 KK와 KK개의 정수 s1,…,sKs_1, \dots , s_K가 차례대로 주어진다.

출력

첫 번째 줄부터 QQ개의 줄에 걸쳐, 각 질의에 대한 답을 출력한다. 이 중 ii (1 &le; i &le; Q)번째 줄에는 ii번째 질의에서 주어진 SS에 대하여, SS의 연결 강도를 출력한다.

예제

예제 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
코드를 제출하려면 로그인하세요.