Ctrl K

Круглый стол и лучшие друзья

Сложная
Устраивается ужин за круглым столом, за который помещается сколько угодно людей. Кандидатов в гости n, они пронумерованы от 0 до n - 1. У каждого есть лучший друг: buddy[i] — номер лучшего друга гостя i (это всегда другой человек). Гость придёт, только если за столом он будет сидеть **рядом** со своим лучшим другом. Верните наибольшее число гостей, которых можно пригласить и рассадить так, чтобы каждый приглашённый сидел рядом со своим лучшим другом.
Пример 1
buddy=[1, 0, 1, 2] → 4

0 и 1 сидят рядом друг с другом, 2 садится рядом с 1, а 3 — рядом с 2: 3, 2, 1, 0 по кругу — все четверо довольны.

Пример 2
buddy=[1, 2, 3, 0, 0] → 4

0, 1, 2, 3 образуют круг, где каждый сидит рядом со своим другом. Гостю 4 нужен 0, но оба соседа 0 уже заняты, так что гостей 4.

Пример 3
buddy=[2, 0, 1, 4, 3] → 3
Ограничения
  • n = len(buddy)
  • 2 ≤ n ≤ 10⁵
  • 0 ≤ buddy[i] ≤ n - 1
  • buddy[i] ≠ i
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПорядок букв по словарю СложнаяСамый длинный подъём по карте СложнаяПлан задач по командам СложнаяПуть в дереве без одинаковых соседей СложнаяПрогулки только в гору Сложная
загружаем Python…
Вход
buddy=[1, 0, 1, 2]
Ожидается
4

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 66 тестов на сервере, включая скрытые.