【题解】P17141 [NOI 2026] 传送

等价于选出一个有根树森林,根都是传送点或者是 \(y_i\)
发现如果你传送到一个根不是 \(y_i\) 的一定还会经历一次传送,所以不妨将除了 \(y_i\) 连通块以外的都设为传送点。这样令你 \(y_i\) 所在连通块是 \(S\),你可以有两种走法:

  • \(x_i\in S\)\(dis(x_i,y_i)\)
  • \(x_i\not\in S\)\(\frac{n}{|S|}+\frac{1}{|S|}\sum_{u\in S} dis(u,y_i)\)

走法 2 与 \(x_i\) 无关,只用对于每个 \(y_i\) 求出答案。
注意到我们一定是将所有点按照 \(dis(u,y_i)\) 的顺序从小到大加入到 \(S\) 中。

  • 结论:对于一个序列 \(0=a_0<a_1\le a_2\le a_3\le a_4\le \cdots < n\)\(\frac{n+\sum_{j<i} a_i}{i}\) 是单谷函数。

证明:
差分:\(\frac{n+s+x}{i+1}-\frac{n+s}{i}=\frac{ni+si+xi-ni-n-si-s}{i(i+1)}=\frac{xi-n-s}{i(i+1)}\)
对于 \(\frac{xi-n-s}{i(i+1)}<0\Rightarrow xi-s<n\),因为 \(x\le y\Rightarrow xi-s\le y(i+1)-s-x\),所以可以得证。

把二分先改成在值域上做,然后确定第 \(k\) 小的是哪个值之后在这个区间内二分集合大小就好。
使用点分树支持查询 \(\le D\) 的距离和、点数和,时间复杂度 \(O(n\log ^2 n+q)\)

posted @ 2026-07-27 10:54  TallBanana  阅读(10)  评论(0)    收藏  举报