Skip to content

【点分治 | 容斥】P15947 [JOI Final 2026] 集邮 5 / Collecting Stamps 5 ​

树上点对问题显然想到点分治,处理出点 i 到当前重心的距离 di,则点对 (i,j) 能成为答案需满足:

  • di+dj≤D;
  • ∃x∈path(rt,i),di−dx≥Tx,即 di≥Tx+dx;
  • ∃x∈path(rt,j),di+dx≥Tx,即 di≥Tx−dx。

对于第二、第三个条件,存在不好做,贪心可以转换为 di≥minx∈path{Tx+dx},在 getdis 记录一下即可解决二。然而“二或三”还是不好做,而一是简单点分治问题,因此可以用满足一的点减去二和三都不满足的点,于是就变成一和三的数点问题,使用树状数组二维偏序解决,时间复杂度 O(nlog2⁡n)。

最近更新