Ctrl K

Минимум несовпадений после перестановок

Средняя
На полке в ряд стоят товары: shelf[i] — код товара на позиции i. Есть план выкладки plan той же длины: на позиции i должен стоять товар plan[i]. Переставлять товары можно не как угодно, а только по разрешённым связям: каждая пара links[k] = [a, b] позволяет поменять местами товары на позициях a и b. Каждую связь можно использовать сколько угодно раз и в любом порядке. Несовпадение — это позиция i, где shelf[i] != plan[i]. Верните наименьшее число несовпадений, которого можно добиться перестановками.
Пример 1
shelf=[7, 3, 9, 3], plan=[3, 7, 3, 9], links=[[0, 1], [1, 2]] → 2

Позиции 0, 1 и 2 связаны цепочкой, поэтому товары 7, 3, 9 можно расставить между ними как угодно: получим [3, 7, 9, 3]. Совпадают позиции 0 и 1, а на позиции 2 стоит 9 вместо 3 и на позиции 3 — 3 вместо 9. Итого 2 несовпадения.

Пример 2
shelf=[5, 6, 5], plan=[6, 5, 5], links=[] → 2

Менять ничего нельзя: отличаются позиции 0 и 1.

Пример 3
shelf=[4, 8, 2, 6], plan=[6, 2, 8, 4], links=[[0, 3], [2, 1]] → 0

Меняем местами 0 и 3, затем 1 и 2 — полка совпадает с планом полностью.

Ограничения
  • 1 ≤ len(shelf) = len(plan) = n ≤ 10⁵
  • 1 ≤ shelf[i], plan[i] ≤ 10⁵
  • 0 ≤ len(links) ≤ 10⁵
  • links[k] = [a, b], 0 ≤ a, b ≤ n − 1, a ≠ b
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиОсушение замкнутых прудов СредняяУчастки суши на карте СредняяЦепочки отношений СредняяСамый большой лесной участок СредняяСклеить карточки контактов Средняя
загружаем Python…
Вход
shelf=[7, 3, 9, 3], plan=[3, 7, 3, 9], links=[[0, 1], [1, 2]]
Ожидается
2

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