Ctrl K

Снять одну вражду

Сложная
В ряд стоят n домов с номерами от 1 до n. Список feuds описывает враждующие пары: [a, b] означает, что жильцы домов a и b не уживаются вместе. Непрерывный отрезок домов (от какого-то дома до какого-то, включая концы) назовём **мирным**, если в нём нет ни одной пары, которая всё ещё враждует (то есть нет обоих домов какой-либо оставшейся пары). Вы обязаны помирить **ровно одну** пару из списка — удалить её. Верните наибольшее возможное число мирных непустых отрезков после этого.
Пример 1
n=5, feuds=[[1, 3], [2, 5]] → 13

Всего отрезков 15. Снимаем вражду [1, 3], остаётся [2, 5]: она запрещает только отрезки, где есть и 2, и 5, — [1..5] и [2..5]. Мирных остаётся 13. Если снять [2, 5], оставшаяся [1, 3] запретит три отрезка ([1..3], [1..4], [1..5]) — будет 12.

Пример 2
n=3, feuds=[[1, 2], [1, 2]] → 4

Одна из двух одинаковых враждебных пар остаётся, поэтому запрещены отрезки [1..2] и [1..3]: из 6 остаётся 4.

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

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