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

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

Good evening, everyone! I'm trying to solve this problem from gym, but I have WA 10. I think my idea is wrong. I used Bipartite Controlling Set. If anyone knows the solution, please help me :( http://codeforces.com/gym/100030

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

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

It's wrong solution.

Test:

6
1 2
2 3
3 4
4 5
5 6

Answer:

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

Я написал какое-то замудрённое дп на дереве, с сотоянием (вершина, bool) Что значил этот bool я уже не помню, но думаю возможны вариации типа "есть ли в родителе полк" или "обязаны ли поставить полк в этой вершине".
Возможно есть решение за линию отрезающее как-то хитро листья, и отмечая какие вершины уже безопасны и т.п.
Upd У меня два bool в решении, как раз с указанными смыслами

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

    Я, когда готовил контест, тоже написал замудренное дп на дереве, за квадрат.
    Между тем существует решение за линию, буквально в пять строчек, одним dfs-ом, только я его не понимаю :(

    P.S. оригинальный пост — на английском

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

      У меня за линию работает дп

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

        Все упирается в тот факт, что если у вершины нету "пока что плохих" потомков, то в нее надо ставить полк только в том случае, если эта вершина — корень дерева (иначе можно поставить полк в предке этой вершины, он "закроет" ее, и при этом, возможно, еще каких-то "братьев").

        Дальше можно все легко свести к одному dfs — обойдем дерево в глубину, и, возвращаясь от листьев в корню, будем поступать так: если вершина сейчас не является листом — ставим полк и отрезаем от дерева все то, что закрыла эта вершина.

        Т.е., в плане реализации — будем ставить полки тогда и только тогда, когда потомок еще не "закрыт", или же наша вершина — корень.

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

    спасибо вам огромное за идею