Лес древних духов

Просмотр в формате PDF

Submit solution


Очки: 140
Ограничение по времени: 1.0s
Ограничение по памяти: 64M

Автор:
Problem types
Allowed languages
C++, Python

В мистическом лесу расположены n полян, пронумерованных от 1 до n.

Для каждой поляны i известно число a_i — номер поляны, с которой она связана духовной нитью.

Будем считать, что если поляна i связана с поляной a_i, то эти две поляны принадлежат одному духовному кругу. Связи рассматриваются как неориентированные: если есть связь между i и a_i, то по ней можно перейти в обе стороны.

Также поляны принадлежат одному духовному кругу, если между ними существует путь по таким связям.

Волшебники хотят соединить все духовные круги в один общий круг, добавляя новые связи между любыми двумя полянами.

Определите, какое минимальное количество новых связей нужно добавить, чтобы все поляны оказались в одном духовном круге.


Формат входных данных

В первой строке дано одно целое число n — количество полян.

Во второй строке даны n целых чисел a_1, a_2, ..., a_n, где a_i — номер поляны, с которой связана поляна i.


Формат выходных данных

Выведите одно целое число — минимальное количество новых связей, необходимых для объединения всех духовных кругов в один.


Пояснение

Если изначально в лесу k духовных кругов, то для объединения их в один достаточно добавить k - 1 связь. Следовательно, нужно найти число компонент связности в неориентированном графе и вывести components - 1.


Ограничения

  • 1 ≤ n ≤ ...
  • 1 ≤ a_i ≤ n

Пример 1

Ввод

6
2 3 1 5 4 6

Вывод

2

Пример 2

Ввод

10
1 2 3 4 5 6 7 8 9 10

Вывод

9

Комментарии


  • 0
    Наталья  прокомментировал 19 Апрель 2026, 8:54 д.п. отредактирован

    тут даже готовое решение не подходит(


    • 0
      montes332  прокомментировал 19 Апрель 2026, 11:47 д.п.

      Поправил эталонку в разборе