Ctrl K

Кого отключить от сети

Сложная
Сеть из n компьютеров задана матрицей смежности network: network[i][j] == 1, если компьютеры i и j соединены напрямую. В начале заражены компьютеры из списка infected. Вирус распространяется по связям: если один из двух напрямую соединённых компьютеров заражён, заражается и второй. Так продолжается, пока заражать больше некого. До начала эпидемии можно полностью отключить от сети ровно один компьютер из infected: он исчезает вместе со всеми своими связями и в подсчёте не участвует. Верните номер компьютера, после отключения которого в итоге заразится как можно меньше компьютеров. Если вариантов несколько, верните наименьший номер.
Пример 1
network=[[1, 1, 0, 0], [1, 1, 1, 0], [0, 1, 1, 1], [0, 0, 1, 1]], infected=[0, 2] → 2

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

Пример 2
network=[[1, 1, 1], [1, 1, 1], [1, 1, 1]], infected=[1, 0] → 0

Какой бы из двух ни отключить, второй заразит оба оставшихся компьютера. При равенстве возвращаем меньший номер — 0.

Пример 3
network=[[1, 1, 0], [1, 1, 0], [0, 0, 1]], infected=[1] → 1
Ограничения
  • 2 ≤ n ≤ 1000, network — матрица n × n из 0 и 1
  • network[i][j] == network[j][i], network[i][i] == 1
  • 1 ≤ len(infected) < n
  • 0 ≤ infected[i] < n, все номера в infected различны
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКого вылечить первым СложнаяОткрытые комнаты от холла СредняяГруппы по общим меткам СредняяСемейства слов на один обмен СложнаяДонести новость до всех Сложная
загружаем Python…
Вход
network=[[1, 1, 0, 0], [1, 1, 1, 0], [0, 1, 1, 1], [0, 0, 1, 1]], infected=[0, 2]
Ожидается
2

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