Задача №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 .

clip_image006.jpg

 

ЗАДАНИЕ

По двум заданным неориентированным графам 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
0 1 0
1 0 1
0 1 0
0 1 0 0 0
1 0 1 0 0
0 1 0 1 0
0 0 1 0 1
0 0 0 1 0

СТРОКА 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
5
0 1 0 0 0
1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

СТРОКА 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    – если EyEb,
  • 30 + 70(Ey - Eb)/ (Em - Eb)  – если Ey > Eb.
Сдать: для сдачи задач необходимо войти в систему