Блог пользователя KBakozoda

Автор KBakozoda, 12 лет назад, По-русски

Всем доброго времени суток,

Столкнулся с задачей , понял , что с данными ограничениями (К <= 18) можно перебором решить эту задачу, но вот заинтересовало одно: как решать эту задачу, при K > 32 ? Если есть идеи для решения этой задачи при К > 32, поделитесь, пожалуйста)

Благодарю.

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Можно жадно убирать команды по количеству повторяющихся участников (начать с больших).

  • »
    »
    12 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +3 Проголосовать: не нравится

    Ок. Понял свою ошибку. Всё идёт онлайн.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится

      Да, точно, не подумал.

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Если делать всё онлайн: выкинуть 123, потом заново посчитать пересечения и т.д., то я пока не умею контртест.

»
12 лет назад, # |
  Проголосовать: нравится +30 Проголосовать: не нравится

Строишь граф g[I][J] = {могут ли I и J соевноваться одновремено}. Дальше ищешь максимальный полный подграф вот так. Для K <= 50 должно хватить.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Не очень понятно, как полный подграф связан с задачей?

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится

      Вершины графа — команды. Вершины соединены, если команды не пересекаются по участникам. Ещешь наибольший набор команд, которые могут друг с другом соревноваться?

      • »
        »
        »
        »
        12 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Да, похоже на то. Я подумал, что вершины — участники.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится -23 Проголосовать: не нравится

    Разве нахождение полного подграфа не O(2^n)?

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится -16 Проголосовать: не нравится

      Там какая-то магия, которая сверху оценивается как 2^n, но работает быстрее.

      • »
        »
        »
        »
        12 лет назад, # ^ |
        Rev. 3   Проголосовать: нравится +13 Проголосовать: не нравится

        Обычный "meet in the middle".

        1. Разбили n вершин на два множества по n / 2 вершин.
        2. Перебрали первую половину (2n / 2 множеств)
        3. За O(1) получаем, с какими вершинами второй половины она соединена.
        4. Для второй половины заранее предподсчитан ответ на вопрос "сколько подмножеств данного множества являются кликами" или на вопрос "max подмножество, являющееся кликой" (массив из 2n / 2 элементов).

        UPD: по ссылке выше комментарий, где Ваня Смирнов объясняет тоже самое только подробнее и по-английски.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Вам же ссылку скинули... там другая сложность.

»
12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Благодарю всех , за помощь!