SOJ ONLINE JUDGE

문제 149

선택한 정점의 가상 트리

내 상태
미제출
난이도
149번 문제 난이도 보기
Platinum II
출제자
rlatjwls7882
시간 제한
5000 ms
메모리 제한
1024 MB
149번 문제 태그 보기
구현

$N$개의 정점으로 이루어지고 간선의 길이가 모두 $1$인 트리가 주어진다. 정점의 번호는 $0$부터 $N-1$까지이며, 루트의 번호는 $R$이다.

선택한 정점을 담은 $K$개의 목록이 주어진다. 각 목록에 대해 중복 정점을 제거한 뒤, 선택한 모든 정점 쌍의 최소 공통 조상을 추가하여 정점 집합 $V$를 만든다. $V$의 각 정점에서 자기 자신을 제외한 조상 중 $V$에 속하는 가장 가까운 조상이 있으면 그 조상과 간선으로 연결한다. 간선의 길이는 원래 트리에서 두 정점 사이의 거리로 정한다. 이렇게 만든 트리를 가상 트리라고 하자.

각 목록의 가상 트리에서 정점 수와 간선 길이의 합을 구해 보자. 선택한 정점이 없다면 두 값은 모두 $0$이다.

입력

첫 번째 줄에 테스트 케이스의 수를 의미하는 정수 $Q$가 주어진다. $(1\le Q\le100)$

각 테스트 케이스의 첫 번째 줄에 정수 $N$, $R$, $K$가 공백으로 구분되어 주어진다. $(1\le N\le100\,000; 0\le R<N; 1\le K\le10\,000)$

두 번째 줄부터 $N-1$개의 줄에 걸쳐 간선의 양 끝 정점의 번호를 의미하는 정수 $u$, $v$가 공백으로 구분되어 주어진다. $(0\le u,v<N; u\ne v)$ 주어진 간선은 트리를 이룬다.

그다음 줄부터 $K$개의 줄에 걸쳐 선택한 정점의 수를 의미하는 정수 $t$와 정점 번호 $a_1, a_2, \cdots, a_t$가 공백으로 구분되어 주어진다. $(0\le t\le200\,000; 0\le a_i<N)$ 같은 정점을 여러 번 선택할 수 있다.

모든 테스트 케이스에 대한 $N$의 합은 $200\,000$ 이하이다. 모든 테스트 케이스의 모든 목록에 대한 $t$의 합은 $200\,000$ 이하이다.

출력

각 테스트 케이스의 정점 목록마다 가상 트리의 정점 수와 간선 길이의 합을 공백으로 구분하여 입력 순서대로 한 줄에 출력한다.

예제 입력 1

3
5 4 4
0 1
0 2
1 3
0 4
0
1 0
5 2 0 2 1 1
5 0 1 2 3 4
3 0 4
0 1
1 2
0
1 0
5 1 1 2 1 1
3 0 1 2
2 0 4
0 1
0
1 0
5 0 1 0 1 1
2 0 1

예제 출력 1

0 0
1 0
3 2
5 4
0 0
1 0
2 1
3 2
0 0
1 0
2 1
2 1

제출

편집기에서 나가려면 Esc를 누른 뒤 Tab 또는 Shift와 Tab을 누르세요.