Майкл и астероиды

Рейтинг: 1Ответов: 1Опубликовано: 12.05.2011

Вобщем, условие задачи:

Майкл хочет провести свой космический корабль через опасное астероидное поле в форме решетки N*N (1 <= N <= 500). Решетка содержит K астероидов (1 <= K <= 10,000), которые расположены в узлах решетки.

У Майкла есть мощное оружие, которое способно уничтожить все астероиды в заданной строке или заданном столбце одним выстрелом. Это оружие очень дорогое, и поэтому Майкл хочет использовать его экономно. По заданному расположению астероидов на поле, найдите минимальное количество выстрелов, которое требуется сделать Майклу, чтобы уничтожить все астероиды.

Формат ввода:

  • Строка 1: Два целых числа N и K, разделенных одним пробелом

  • Строки 2..K+1: Каждая строка содержит два разделенных пробелом числа R и C (1 <= R, C <= N), обозначающие соответственно координаты строки и колонки астероида.

Пример ввода:

3 4
1 1
1 3
2 2
3 2

Детали ввода:

Следующая диаграмма представляет заданную решетку, где 'X' обозначает астероид, а '.' обозначает отсутствие астероида.

X.X
.X.
.X.

Формат вывода:

  • Строка 1: Целое число, представляющее минимальное количество выстрелов, которые должен сделать Майкл

Пример вывода:

2

Детали вывода:

Майкл может выстрелить по строке 1, уничтожив астероиды в позициях (1,1) и (1,3), а затем выстрелить по колонке 2, уничтожив астероиды в позициях (2,2) и (3,2).

Ограничение по памяти: 32 Мб. Ограничение по времени: 1 секунда.

Ответы

▲ 2

Сформируем двудольный граф с N вершинами в каждой доле. Вершины одной из долей будут соответствовать столбцам, вершины другой доли - строкам. Для каждого астероида добавим ребро между вершинами, соответствующими столбцу и строке астероида. Теперь заметим, что ответом к задаче является размер минимального вершинного покрытия в этом графе. По теореме Кёнига размер минимального вершинного покрытия в двудольном графе равен размеру максимального паросочетания. А максимальное паросочетание в двудольном графе можно найти, например, алгоритмом Куна за время порядка O(NK).