2024.7.20 鲜花

推歌:Dive Back In Time

点分治好题

ZB 的旋转树

翻译成人话:

给定一颗树,求:

uvbubv+max(bu,bv)disu,v+1

考虑点分,考虑求经过根节点的。

先求一部分:

uvbubvdisu,v

=uvbubvdepu+depv

构造多项式 f,次数表示 dep ,系数表示这个深度下 b

这样 fg 表示的就是原式,卷完了直接枚举项求即可。

考虑后面的 uvmax(bu,bv)disu,v+1,为了方便以后的做法,先将 max 整成 min

uvbubv+max(bu,bv)disu,v+1=uvbubv+bu+bvmin(bu,bv)disu,v+1

前面可以配成 uv(bu+1)(bv+1)disu,v,和之前一样处理。

现在只剩下 uvmin(bu,bv)disu,v 需要处理。

(m(u,v)=k) 表示 min(bu,bv)=k 的点对个数。

发现依然不好做,考虑容斥成 (m(u,v)k)(m(u,v)k+1)(类似定义)。

于是问题变成了求 k[1,maxb],uv(m(u,v)k)disu,v

因为有 b 限制,考虑阈值分治,在 kT 以上可以 O(n2) 暴力。

其余的直接枚举 k,问题可以转换成 uv[buk][bvk]disu,v ,一样卷积即可。

Miku

posted @   5k_sync_closer  阅读(46)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示