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

Автор S_Aditya, история, 5 лет назад, По-английски

I have recently learnt the rerooting technique from the previous contest. I will be greatful if someone will please share some problems related to it.

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

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

thanks

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

1187E - Tree Painting One of the best problem on rerooting!!

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

This comment have few more nice problems on rerooting.

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

this one: Atcoder dp_v

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

Can Someone explain What is rerooting?

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

    In rerooting, what we basically do is first calculate the required data by considering some node as the root of the tree.

    In rerooting type problems, it is required to calculate the same data by considering each and every node as the root, using naive approach would result in tle.

    So, what we try do is using the calculated values(say by considering 1 to be the root), we try to calculate the answer for each node(if we assume that node to be the root) in O(1) time.

    Consider a case in which node is the current root and it is one of it's child, so it would had contributed something in the answer of node, so now we try to make it as the new root, so first we remove the contribution of it from node, then node is now a child for it, so we add the contribution of the subtree with root being node to the answer of it and now it has become the new root of the tree.

    But when we need to calculate the answer for say it1(second child of node) , we have to rollback the changes we made.

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

The blog from where I learnt rerooting:-link

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

One more problem based on the concept : 1324F - Maximum White Subtree

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

This is quite a nice one!

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

More problems from recent ABCs that can be solved with rerooting:

https://atcoder.jp/contests/abc223/tasks/abc223_g

https://atcoder.jp/contests/abc222/tasks/abc222_f

https://atcoder.jp/contests/abc220/tasks/abc220_f

In particular abc222f's editorial has a nice generic template with links to (japanese) tutorials

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

    Hello,

    Actually I can't understand how to use merge and apply function

    Like in your second question I am using

    Data merge(Data a, Data b) { return a + b; }

    and apply as

    Data apply(Data a, int c, int d, Cost w) { return a + w; }

    But this is wrong