A - CF566C Logistical Questions
Sol
c o s t ( u , v ) = d i s ( u , v ) 3 2 cost(u,v)=dis(u,v)^{3\over 2} cost(u,v)=dis(u,v)23在 d i s ( u , v ) ≥ 0 dis(u,v)\ge 0 dis(u,v)≥0的时候随 d i s ( u , v ) dis(u,v) dis(u,v)的递增而递增。所以,对于一条路径上的点 u 1 , u 2 ⋯ u k u_1,u_2\cdots u_k u1,u2⋯uk和某一个固定的点 p p p, h ( x ) = c o s t ( u x , p ) h(x) = cost(u_x,p) h(x)=cost(ux,p)是一个单峰函数。由于 w i ≥ 0 w_i \ge 0 wi≥0,所以 g ( x ) = ∑ p c o s t ( u x , p ) ⋅ w p g(x) = \sum_{p} cost(u_x,p)\cdot w_p g(x)=∑pcost(ux,p)⋅wp也是单峰函数。
故而对于一个点,与它相邻的节点中至多只有一个节点比它优秀。点分治即可。
如何快速找出更优的那个节点:假设点分治过程中当前的根节点为 u u u,对 u u u的某一个子树 s u b x sub_x subx内的所有点 v v v,求出 h ( s u b x ) = ∑ c o s t ( u , v ) w v h(sub_x) = \sum cost(u,v)w_v h(subx)=∑cost(u,v)wv这个函数的导数 h ′ ( s u b x ) h'(sub_x) h′(subx)。我们把决策点从 u u u移往 s u b x sub_x subx这棵子树的时候,答案的变化量就是 ∑ y ! = x h ′ ( s u b y ) − h ′ ( s u b x ) \sum _{y!=x} h'(sub_y) - h'(sub_x) ∑y!=xh′(sub<