Задача №555. Запрещенный подграф
Два неориентированных графа G и H называются изоморфными , если:
- они имеют одинаковое количество вершин;
- существует такое однозначное соответствие между их вершинами, что любые две различные вершины графа G соединены ребром тогда и только тогда, когда соединены ребром соответствующие вершины графа H.
Например, следующие два графа изоморфны, хотя выглядят по-разному:
Возможным однозначным соответствием, показывающим, что эти два графа изоморфны, является {a-1, b-6, c-8, d-3, g-5, h-2, i-4, j-7}, хотя существуют и другие подобные соответствия.
Подграфом графа G называется граф, множества вершин и ребер которого являются подмножествами множеств вершин и ребер графа G. Заметьте, что граф G является также и своим подграфом. На рисунке показаны граф и один из его подграфов:
Говорят, что граф G содержит другой граф H , если существует хотя бы один подграф H ’ графа G , который изоморфен H . Следующий рисунок показывает граф G , который содержит граф H .
ЗАДАНИЕ
По двум заданным неориентированным графам G и H постройте подграф G’ графа G такой, что:
- количество вершин в графах G и G’ одинаково;
- H не содержится в G’ .
Естественно, может быть много подграфов графа G’ с перечисленными свойствами. Постройте подграф с как можно большим количеством ребер.
БАЗОВЫЙ АЛГОРИТМ
Возможно, наиболее простой стратегией при решении этой задачи будет следующая: рассматривать ребра графа G в порядке, в котором они представлены во входных данных, после чего пытаться добавлять ребра одно за другим в граф G’, проверяя на каждом шаге, входит ли граф H в граф G’ или нет. Правильная реализация этого жадного алгоритма наберет некоторое количество очков, хотя существуют гораздо лучшие стратегии.
ОГРАНИЧЕНИЯ
3 ≤ m ≤ 4 | m – количество вершин в H. |
3 ≤ n ≤ 1000 | n – количество вершин в G . |
ВВОД
Вы получите 10 файлов с именами от forbidden1.in до forbidden10.in, каждый со следующими данными:
forbiddenK.in |
ОПИСАНИЕ |
3 5 |
СТРОКА 1: Содержит два целых числа, разделенных пробелом, соответственно m и n. СЛЕДУЮЩИЕ m СТРОК: Каждая строка содержит m целых чисел, разделенных пробелами, и представляет одну вершину из H в порядке 1, ..., m . i -ый элемент j -ой строки в этой секции равняется 1, если вершины i и j соединены ребром в H , и равняется 0 в противном случае. СЛЕДУЮЩИЕ n СТРОК : Каждая строка содержит n целых чисел, разделенных пробелами, и представляет одну вершину из G в порядке 1, ..., n . i -ый элемент j -ой строки в этой секции равняется 1, если вершины i и j соединены ребром в G , и равняется 0 в противном случае. |
Заметьте, что за исключением строки 1, приведенные входные данные представляют собой матрицы смежности графов H и G .
ВЫВОД
Вы должны создать 10 файлов по одному на каждый входной. Каждый файл должен содержать следующие данные:
forbiddenK.out |
ОПИСАНИЕ |
#FILE forbidden K |
СТРОКА 1: Заголовок файла. Заголовок файла должен содержать #FILE forbidden K где K – это число между 1 и 10, которое соответствует решенному входному файлу. СТРОКА 2: Содержит одно целое число : n . СЛЕДУЮЩИЕ n СТРОК : Каждая строка содержит n целых чисел, разделенных пробелом, и представляет одну вершину из G’ в порядке 1, ..., n . i -ый элемент j -ой строки в этой секции равняется 1, если вершины i и j соединены ребром в G’ , и равняется 0 в противном случае. |
Заметьте, что за исключением строк 1 и 2, приведенные входные данные представляют собой матрицу смежности графа G’. Обратите внимание, что есть много вариантов ответа, и приведенный вариант является корректным, но не оптимальным.
ОЦЕНИВАНИЕ
Ваши баллы будут зависеть от количества ребер в графе G’, который Вы получите. Количество баллов определяется следующим образом: Вы получите ненулевое количество баллов для каждого выходного файла, только
если он соответствует условиям задачи. В этом случае количество баллов вычисляется так: пусть Ey будет количеством ребер в Вашем ответе, Eb – количество ребер графа G’, которое вычислено БАЗОВЫМ АЛГОРИТМОМ,
Em – максимальное количество ребер в выводах всех участников. Количество полученных баллов определяется следующим образом:
- 30 Ey / Eb – если Ey ≤ Eb,
- 30 + 70(Ey - Eb)/ (Em - Eb) – если Ey > Eb.