Advertisement
Alexandre_lsv

#2, SPbSU

Jun 16th, 2017
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Очевидно, что как минимум 2 клики в графе уже присутствуют.
  2. Как вариант, у каждой вершины можно посчитать кратность.
  3.  
  4. Как известно, кратность каждой вершины в изолированной клике меньше на единицу, чем количество вершин в клике.  
  5.  
  6. Кратности вершин можно хранить в хэш-таблице или массиве. Также полезно хранить хэш-таблицу (далее КК) с количеством вершин с определенной кратностью <кратность --- количество>
  7.  
  8. Также для быстрого доступа к соседям можно хранить матрицу смежности.
  9.  
  10. Искать сами клики вариант, наверное, не самый лучший, так что будем удалять ребра.
  11.  
  12. Ребра удалять будем следующим образом:
  13. 1) Берем вершину с максимальной кратностью, запоминаем ее соседей, включая ее саму;
  14. 2) Проходимся по всем соседям этой вершины и ищем вершину, общих соседей с изначальной вершиной у которой меньше всего;
  15. 3) Удаляем ребро между ними, декременируя кратности этих двух вершин и изменяя не более 4 ячеек в КК.
  16.  
  17. Так будем делать до тех пор, пока в КК не получим 2 ключа --- кратности вершин, причем каждый ключ на 1 меньше, чем значение, и сумма значений которых будет равна количеству вершин, а сумма этих ключей --- (количеству вершин - 2)
  18.  
  19. Ассимптотика: время O(|V|^2*|E|), память O(|V|^2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement