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

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

Сегодня в 1900 по Москве.
Время в других часовых поясах.

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +9 Проголосовать: не нравится

Как решать 550? Немного похожа на независимое множество в транзитивном замыкании.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

кто-нибудь сдал тернарник в 250?

»
14 лет назад, скрыть # |
← Rev. 6  
Проголосовать: нравится +4 Проголосовать: не нравится

1000: представим числа в двоичном виде. Пройдемся гауссом прямо и обратно, пусть результат это A. Возьмём XOR строк, пусть это S. Ответ — сумма по i : S xor (i==0?0:A[i])

550: макс. антицепь = мин. покрытие путями = N минус макс. паросочетание в раздвоенном графе. Циклы? Пофиг на них. Если девушка сама себя может защитить, то в графе являющимся замыканием есть такое макс. паросочетание где все такие девушки идут в самих себя, а значит не влияют.

Эх, если бы не было бы тупой ошибки в паросочетании (khun(i) -> khun(M[i])) , было бы седьмое.

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

    А как именно в 550 граф раздваивать?

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

    А как в 550 после этого восстанавливать ответ, если я хочу узнать, какие именно вершины брать?

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

      Не знаю, может вот здесь написано: http://en.wikipedia.org/wiki/Dilworth's_theorem

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

      Тоже очень интересует этот вопрос.

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

        Придумал craus.

        Сразу дополним граф до транзитивно замкнутого. Покроем путями. Теперь нужно на каждом пути выбрать ровно одну вершину антицепи (если на одном пути две вершины — они конфликтуют, если ноль — их мало).

        Сначала выберем все вершины, являющиеся нижними концами путей. Теперь, пока в множестве выбранных есть конфликт — пара вершин (A,B) такая, что существует ребро из A в B — заменяем вершину B на ее непосредственного предка в пути.

        Почему это корретно? В частности, почему мы уверены, что вершина B никогда не оказывается верхней в пути при попытке обращения к ее предку? Заметим, что любая операция замены была обязательной. Это значит, что если на каком-то шаге вершину B пришлось заменить на предка, то B не может принадлежать никакой наибольшей антицепи (можно доказать по индукции). Получается, что если на каком-то шаге мы не можем совершить операцию замены, то на пути этой вершины вообще нельзя выбрать элемент антицепи, что противоречит Dilworth's theorem.

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

Что неправильного в моём решении 550: в топологическом порядке запускаем от ещё не рассмотренной вершины dfs и добавляем эту вершину в ответ, если на неё никто не сослался в процессе обхода?

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

В 550 заходит перебор. Только у меня была лишняя оптимизация, из-за которой TL. И даже очевидно почему. Вот отстой.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

Мой слив