专栏文章

P9600

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip3i9jr
此快照首次捕获于
2025/12/03 05:33
3 个月前
此快照最后确认于
2025/12/03 05:33
3 个月前
查看原文
  • 一棵树上有两个城市 A,BA,B,令 xxyy 路径上的点集合(包括端点)为 Px,yP_{x,y},你需要对点 ii 分配 cic_i 使得 cik\sum c_i\le k,同时对于一个点 xx,如果 iPx,A,dis(i,A)ci\forall i\in P_{x,A},\operatorname{dis}(i,A)\le c_i 则获得 11 收益,iPx,B,dis(i,B)ci\forall i\in P_{x,B},\operatorname{dis}(i,B)\le c_i 则同样获得 11 收益,求合法方案中收益最大的。
  • \item 显然第 ii 个点只有可能有 33cic_i0,min(dis(x,A),dis(x,B)),max(dis(x,A),dis(x,B))0,\min(\operatorname{dis}(x,A),\operatorname{dis}(x,B)),\max(\operatorname{dis}(x,A),\operatorname{dis}(x,B)),下令 min(dis(x,A),dis(x,B))=ai,max(dis(x,A),dis(x,B))=bi\min(\operatorname{dis}(x,A),\operatorname{dis}(x,B))=a_i,\max(\operatorname{dis}(x,A),\operatorname{dis}(x,B))=b_i
  • 先把点分成这三类点:
  • 可以发现如果有点 xx 满足 cx=bxc_x=b_x,则有 iPA,B,ciai\forall i\in P_{A,B},c_i\ge a_i,且 iPA,B,ci=bi\exists i\in P_{A,B},c_i=b_i,可以分类讨论 A,B,C 类点来证明。
  • 分两种讨论,第一种是不存在 xx 满足 cx=bxc_x=b_x,这个直接 sort 一遍优先选距离最小的即可。不需要判断是否合法,因为先选距离更远的一定不优,如上图,如果只选择了 14,改为选 12 花费的显然更少。
  • 第二种是存在 cx=bxc_x=b_x,这个就先让所有 C 类点的 cic_i 加到 aia_i,即 aibi,bia_i\gets b_i, b_i\gets \infty,然后按照 bib_i 排序,排序后显然可以找到一个中间点 pospos,使得 ipos,ci=ai\forall i\le pos,c_i=a_ici=bic_i=b_i,且 i>pos,ci=0\forall i>pos,c_i=0ci=aic_i=a_i
  • 这等价于证明最优方案不存在 x,y,bx<by,cx=0,cy=by\nexists x,y,b_x<b_y,c_x=0,c_y=b_y,显然如果存在,让 cxbx,cy0c_x\gets b_x,c_y\gets 0,此时 x,yx,y 对答案总贡献不改变,并且 c\sum c 减少了。
  • 这里也不需要判断是否合法,证明跟前面类似,先选距离更远的一定不优。
  • 先拆贡献,在 pospos 前面的都先对 c\sum c 贡献 aia_i,然后前面部分就变成了 biaib_i-a_i,后面部分是 aia_i。以下令这部分为 sis_i
  • 枚举 pospos,二分 midmid,check sxmidsxkiposai\sum\limits_{s_x\le mid} s_x\le k-\sum\limits_{i\le pos} a_i
  • 把这个离散化一下然后放到权值树状数组里,求 pospos 答案就像前面的二分求,复杂度 O(nlog2n)O(n\log^2 n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...