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

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

There is a problem from phuket regional 2015 that i have been trying to solve.

Here is the problem link : https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=690&page=show_problem&problem=5321

The problem transforms into something like this , there is a tree ( at most 10^5 nodes) where each node has two values(let them call a,b). Now there are some (at most 10^5) queries of form : U V x y .

You have to find all the nodes on path U to V for which a*x + b*y is minimum. Note that if this minimum occurs for several nodes , you have to find them all. It is guaranteed that you don't have to print more than 3*10^5 nodes' id.

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

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

You have to be able to solve the following problem:
Given pairs of integers (ai, bi), for a pair (x, y) find the minimal value of ai*x+bi*y.

You can note that a*x+b*y is a dot product of vectors (a,b) and (x,y). So you have to find a vector i such that (ai, bi) * (x, y) is minimal (* — is dot product). It's a standard problem which can be solved by constructing the convex hull of points (ai, bi).

Now you add HLD and get an O(n*log(n)^2) solution