QOJ.ac

QOJ

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

#16301. Контрразведка

Estadísticas

В Байтеотии есть $n$ городов, пронумерованных от $1$ до $n$, и $n-1$ дорога, каждая из которых напрямую соединяет два города. Из любого города можно добраться до любого другого города ровно одним способом, не проходя по одним и тем же дорогам дважды.

Вы отвечаете за контрразведку Байтеотии. Вы только что получили информацию о том, что шпионы из враждебной Битотии проникли в некоторые города! Вы знаете, что битотийские шпионы всегда действуют парами. Когда один шпион из пары обнаруживает полезную информацию, он пытается добраться до города, в котором находится второй шпион, чтобы поделиться своими находками. Для каждой из $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.