首页 > 其他 > 详细

CF12266F

时间:2020-06-13 20:44:16      阅读:45      评论:0      收藏:0      [点我收藏+]

来一个O(nlogn)做法,跑得挺快。

技术分享图片

假设点集S包含点X,Y,Z,红色链长度为a,黄色链长度为b,绿色链长度为c。

如果|a-b|>1,那么有|dis(X,Z)-dis(Y,Z)|=|(a+c)-(b+c)|=|a-b|>1,不符合题目要求。

所以a=b或|a-b|=1。所以存在一个点A,到S中每一个点的距离都为p或p+1(0<2p<n),我们把这个距离p称为“点心距”。

接着发现一定是一下两种情况之一(证明留给读者自行思考):

情况1:S中任两点到点A的链没有公共边。

情况2:S中任意一点P满足min(dis(P,A),dis(P,A‘))=p(A‘为一个与A相邻的点)。

于是,S中的点便是由A点或者A点及A‘点伸出来的若干条“长度相近”链的另一端点组成(如图)。

技术分享图片

其中“长度相近”指长度均为p或p+1,且长度为p的链只有一条或长度为p+1的链只有一条。

预处理出每一个点连出所有边引出链的最大长度,对于一个点P,设其引出第k长的链长度为len(p,k),则$ans_{len(p,k)} \geq k$。

CF12266F

原文:https://www.cnblogs.com/2005lz/p/13121667.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!