Editorial for Yet Another Contest 3 P4 - Rumour
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
As , we should aim for a solution with approximately queries.
Subtask 1
At any time, the possible values of form a potential range. When we query a suspect , we can determine whether is equal to , greater than , or less than . Hence, we can simply binary search for the value of , using approximately queries.
Subtask 2
At any time, the possible values of form a (non-rooted) subtree. Consider querying suspect such that is part of the subtree, and rooting the tree of . Then, our query tells us which (rooted) subtree of the children of contains .
Thus, we can root the tree at node . After each query, we simply descend to the left or right subtree of the current node, depending on which subtree the return value of the query lies in.
Subtask 3
We can optimise our subtask solution to work on a general graph. Given a (non-rooted) tree that could lie in, we need to determine the optimal to query. Recall that after querying , if we have not yet found , then our new tree could be any of the subtrees formed when removing .
As we are looking for a solution with approximately queries, we should choose a value of such that the maximum size of any subtree formed when removing is at most half the size of the current tree. This would allow us to reduce the size of the possible set of values of by half in each query. To do so, we should choose to be the centroid of the current tree.
Comments