QOJ.ac

QOJ

Límite de tiempo: 4 s Límite de memoria: 512 MB Puntuación total: 100

#16301. 방첩

Estadísticas

바이트오티아(Byteotia)에는 $1$부터 $n$까지 번호가 매겨진 $n$개의 도시와, 각 도시를 직접 연결하는 $n-1$개의 도로가 있습니다. 모든 도시에서 다른 모든 도시로 가는 경로는 되돌아가는 길 없이 정확히 하나씩 존재합니다.

당신은 바이트오티아 방첩대를 책임지고 있습니다. 적대적인 비토티아(Bitotia)의 스파이들이 일부 도시에 잠입했다는 정보를 방금 입수했습니다! 비토티아 스파이들은 항상 쌍으로 활동한다는 사실을 알고 있습니다. 한 쌍의 스파이 중 한 명이 유용한 정보를 발견하면, 그들은 정보를 공유하기 위해 다른 스파이가 있는 도시로 이동하려고 합니다. $q$개의 스파이 쌍 각각에 대해, 현재 각 스파이가 어느 도시에 있는지 정확히 알고 있습니다.

당신의 임무는 어떤 스파이 쌍도 만나지 못하게 하는 것입니다. 이를 위해 임의의 도시 집합에 격리를 선포할 수 있습니다. 격리된 도시로는 들어갈 수도, 통과할 수도, 나갈 수도 없습니다.

스파이 쌍은 격리되지 않은 도시들로 이루어진 경로 $x_1, x_2, \dots, x_k$가 존재할 때만 만날 수 있습니다. 여기서 $x_1$은 한 스파이가 있는 도시이고, $x_k$는 다른 스파이가 있는 도시이며, 모든 $1 \le i \le k-1$에 대해 도시 $x_i$와 $x_{i+1}$은 도로로 직접 연결되어 있어야 합니다.

당연히 국가 전체를 마비시키고 싶지는 않으므로, 가능한 한 적은 수의 도시를 격리하고자 합니다. 모든 스파이 쌍이 만나는 것을 방지하기 위해 격리해야 하는 최소 도시 수를 계산하십시오. 또한, 이를 달성하기 위한 격리 도시 목록 중 하나를 제시하십시오.

입력

입력의 첫 번째 줄에는 바이트오티아의 도시 수 $n$과 스파이 쌍의 수 $q$ ($2 \le n \le 5 \cdot 10^5$, $1 \le q \le 5 \cdot 10^5$)가 주어집니다.

다음 $n-1$개의 줄에는 도로에 대한 정보가 주어집니다. $i$번째 줄($1 \le i \le n-1$)에는 두 정수 $a_i$와 $b_i$($1 \le a_i, b_i \le n$, $a_i \neq b_i$)가 주어지며, 이는 도시 $a_i$와 $b_i$가 도로로 직접 연결되어 있음을 의미합니다.

다음 $q$개의 줄에는 스파이 쌍에 대한 정보가 주어집니다. $i$번째 줄($1 \le i \le q$)에는 두 정수 $c_i$와 $d_i$($1 \le c_i, d_i \le n$, $c_i \neq d_i$)가 주어지며, 이는 $i$번째 스파이 쌍이 위치한 도시를 나타냅니다(한 명은 $c_i$에, 다른 한 명은 $d_i$에 있습니다). 여러 스파이(서로 다른 쌍)가 같은 도시에 있을 수도 있습니다.

출력

출력의 첫 번째 줄에는 모든 스파이 쌍이 만나는 것을 방지하기 위해 격리해야 하는 최소 도시 수 $s$를 출력하십시오. 두 번째 줄에는 이를 달성하기 위해 격리해야 하는 도시 $s$개를 출력하십시오.

예제

예제 입력 1

7 3
1 2
1 3
2 4
2 5
2 6
3 7
1 5
1 6
3 7

예제 출력 1

2
2 3

참고

그림에서 $A$, $B$, $C$로 표시된 세 쌍의 스파이가 있습니다. 도시 $2$와 $3$(원으로 표시됨)을 격리하면, 어떤 스파이 쌍도 이 도시들을 거치지 않고는 만날 수 없습니다. 격리할 수 있는 다른 유효한 도시 목록으로는 예를 들어 $1$과 $3$, 또는 $1$과 $7$이 있습니다.

서브태스크

서브태스크 제한 점수
1 $n, q \le 20$ 9
2 $q \le 2$ 11
3 각 스파이 쌍을 잇는 경로는 최대 하나의 다른 경로와 교차함 17
4 $a_i = i, b_i = i + 1$ ($1 \le i \le n - 1$) 12
5 $a_i = i + 1, b_i = \lfloor \frac{i+1}{2} \rfloor$ ($1 \le i \le n - 1$) 23
6 추가 제한 없음 21

답의 첫 번째 줄만 맞춘 경우, 해당 테스트 케이스 점수의 80%를 획득합니다. 이 점수를 받기 위해 두 번째 줄을 출력할 필요는 없습니다.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.