만드는 중입니다

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

경로 덮기

시간 제한1초메모리 제한256 MB

요약
트리와 m개의 단순 경로가 주어질 때, 모든 경로와 만나는 최소 크기 정점 집합을 찾아 크기와 원소를 출력한다.
난이도

어려움10점 중 8점

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

문제

정수 1,2,…,n1, 2, \ldots, n으로 번호가 붙은 nn개의 정점으로 이루어진 무방향 무가중치 트리가 주어진다. 이 트리에서 mm개의 단순 경로가 선택된다. 각 경로는 양 끝점의 쌍 (ai,bi)(a_i, b_i)로 주어진다.

VV를 트리의 모든 정점의 집합이라 하자. VV의 부분집합 SS가 좋은 집합이라는 것은, 1≤i≤m1 \le i \le m인 모든 ii에 대해 aia_i에서 bib_i로 가는 단순 경로가 SS의 정점을 적어도 하나 포함한다는 뜻이다. VV의 부분집합 TT가 최선 집합이라는 것은 TT가 좋은 집합이고, ∣X∣<∣T∣|X| < |T|인 좋은 집합 XX가 존재하지 않는다는 뜻이다.

VV의 최선 집합을 구해야 한다.

입력

첫째 줄에는 트리의 정점 수 nn이 주어진다 (1≤n≤1051 \le n \le 10^5).

다음 n−1n - 1개의 줄에는 트리의 간선이 하나씩 주어진다. ii번째 간선은 그 간선이 잇는 두 정점의 번호 uiu_i와 viv_i로 주어진다 (1≤ui,vi≤n1 \le u_i, v_i \le n, ui≠viu_i \ne v_i). 주어진 간선들이 트리를 이룬다는 것은 보장된다.

그다음 줄에는 경로의 수 mm이 주어진다 (1≤m≤1051 \le m \le 10^5).

다음 mm개의 줄에는 트리 위의 경로가 하나씩 주어진다. ii번째 경로는 양 끝점의 번호 aia_i와 bib_i로 주어진다 (1≤ai,bi≤n1 \le a_i, b_i \le n). 어떤 경로는 ai=bia_i = b_i일 수 있다. 모든 경로가 서로 다르다는 것은 보장되지 않는다.

출력

첫째 줄에는 VV의 최선 집합의 크기를 출력한다. 둘째 줄에는 VV의 최선 집합에 속하는 정점의 번호를 아무 순서로 출력한다.

가능한 답이 여러 개라면 그중 아무 것이나 출력한다.

예제2

  1. 예제 1

    입력
    4
    1 2
    2 3
    2 4
    2
    1 2
    4 2
    
    예상 출력
    1
    2
    
  2. 예제 2

    입력
    6
    1 2
    2 3
    3 4
    5 6
    5 2
    5
    2 1
    6 6
    1 4
    3 4
    4 1
    
    예상 출력
    3
    6 3 1