Олимпиадный тренинг

Задача . E. Неупорядоченные обмены


У Алисы есть перестановка \(p\) чисел от \(1\) до \(n\). Алиса может поменять местами пару \((x, y)\), что означает поменять местами элементы в позициях \(x\) и \(y\) в \(p\) (то есть поменять местами \(p_x\) и \(p_y\)). Алиса недавно изучила свой первый алгоритм сортировки, поэтому она решила отсортировать свою перестановку за минимальное количество возможных обменов. Она записала на листе бумаги все обмены в том порядке, в котором она их выполняла для сортировки перестановки.

Например,

  • \([(2, 3), (1, 3)]\) является правильной последовательностью обменов Алисы для перестановки \(p = [3, 1, 2]\), в то время как \([(1, 3), (2, 3)]\) не является, потому что не сортирует перестановку. Обратите внимание, что мы не можем отсортировать перестановку менее чем за \(2\) обмена.
  • \([(1, 2), (2, 3), (2, 4), (2, 3)]\) не может быть последовательностью обменов Алисы для \(p = [2, 1, 4, 3]\), даже если она сортирует перестановку, потому что \(p\) можно отсортировать за \(2\) обмена, например, используя последовательность \([(4, 3), (1, 2)]\).

К сожалению, Боб переставил местами обмены в последовательности, выписанной Алисой.

Вам дана перестановка Алисы \(p\) и обмены, сделанные Алисой в произвольном порядке. Можете ли вы восстановить правильную последовательность обменов, которая сортирует перестановку \(p\)? Поскольку Алиса написала правильные обмены до того, как Боб их перемешал, гарантируется, что существует некоторый порядок обменов, который сортирует перестановку.

Входные данные

Первая строка содержит \(2\) целых числа \(n\) и \(m\) \((2 \le n \le 2 \cdot 10^5, 1 \le m \le n - 1)\)  — размер перестановки и минимальное количество обменов, необходимое для сортировки перестановки.

Следующая строка содержит \(n\) целых чисел \(p_1, p_2, ..., p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы \(p\). Гарантируется, что \(p\) образует перестановку.

Далее следуют \(m\) строк. В \(i\)-й из следующих \(m\) строк содержатся два целых числа \(x_i\) и \(y_i\)  — обозначающих \(i\)-й обмен \((x_i, y_i)\).

Гарантируется, что можно отсортировать \(p\) с этими \(m\) обменами и что нет способа отсортировать \(p\) с менее чем \(m\) обменами.

Выходные данные

Выведите перестановку \(m\) целых чисел  — правильный порядок обменов, выписанный Алисой, который сортирует перестановку \(p\). Для лучшего понимания обратитесь к объяснению примера.

В случае нескольких возможных ответов выведите любой.

Примечание

В первом примере \(p = [2, 3, 4, 1]\), \(m = 3\) и заданы обмены \([(1, 4), (2, 1), (1, 3)]\).

Существует только один правильный порядок обмена, а именно \([2, 3, 1]\).

  1. Сначала мы выполняем обмен \(2\) из входных данных, т.е. \((2, 1)\), \(p\) становится \([3, 2, 4, 1]\).
  2. Затем мы выполняем обмен \(3\) из входных данных, т.е. \((1, 3)\), \(p\) становится \([4, 2, 3, 1]\).
  3. Наконец, мы выполняем обмен \(1\) из входных данных, т.е. \((1, 4)\) и \(p\) становится \([1, 2, 3, 4]\), что является отсортированным.

Во втором примере \(p = [6, 5, 1, 3, 2, 4]\), \(m = 4\) и заданные обмены \([(3, 1), (2, 5), (6, 3), (6, 4)]\).

Один из возможных правильных порядков обмена  — \([4, 2, 1, 3]\).

  1. Выполните обмен \(4\) из входных данных, т.е. \((6, 4)\), \(p\) становится \([6, 5, 1, 4, 2, 3]\).
  2. Выполните обмен \(2\) из входных данных, т.е. \((2, 5)\), \(p\) становится \([6, 2, 1, 4, 5, 3]\).
  3. Выполните обмен \(1\) из входных данных, т.е. \((3, 1)\), \(p\) становится \([1, 2, 6, 4, 5, 3]\).
  4. Выполните обмен \(3\) из входных данных, т.е. \((6, 3)\) и \(p\) становится \([1, 2, 3, 4, 5, 6]\), что является отсортированным.

Возможны и другие ответы, например, \([1, 2, 4, 3]\).


Примеры
Входные данныеВыходные данные
1 4 3
2 3 4 1
1 4
2 1
1 3
2 3 1
2 6 4
6 5 1 3 2 4
3 1
2 5
6 3
6 4
4 1 3 2

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя