「模拟赛」Solution Set

heart

Solution#

可以记 f(u) 为从 u 出发到某个点停止的方案数,f(u) 可以 O(n) 转移,显然复杂度为 O(n2).
当前我们要转移 u 子树内,对于 vsubtree(u) 我们记 gvminpk>pjpk,其中 kuv 路径(不包含 u,v)上的节点,仅当 pu<gvpu>pvv 可以对 u 贡献,我们可以用线段树维护 f(u),考虑线段树下标为 i 的位置维护 pj=ivi=gjsi=f(j),我们可以先用对子树进行线段树合并然后考虑修改和查询

  • 对于 k[1,pi] 修改 vkmin(vk,pi).

  • 查询 k=1pi[vk>pi]sk.

可以用 Segment Tree Beats 维护,复杂度 O(nlogn).

「USACO23OPEN」Triples of Cows P

Link#

Solution#

发现删点后连边操作是 O(n2) 级别的,考虑建虚点来优化。

具体的,考虑我们将原树上点称为黑点,新建的虚点为白点,我们将边拆为一个点,我们将原树上的边 (ui,vi) 变为 (ui,n+i),(vi,n+i),由于 n 最后删去,我们可以以 n 为根。我们删点可以直接将所有儿子合并到父亲上,用并查集维护时间复杂度就是 O(nlogn) 的而且保证了图仍然是一棵树,原树 u,v 直接相连等价于黑点 u 和黑点 v 同时是某个白点的邻接点,我们用 W 表示 白点集合,用 B 表示 黑点集合。

考虑如何算贡献,考虑计算五元组 (a,x,b,y,c),其中 a,b,cB,x,yW,我们可以记录 fu,gu,huu1/2/3 级儿子数量。

  • x=y,我们可以在 x 的邻接点中任选 3 个互不相同的点即可,贡献为

uW(fu1)fu(fu+1)

  • xy,我们可以枚举 b 然后分为两种情况讨论

Case1: xb 父亲,yb 儿子,贡献为

2uWfuhu

Case2: x,yb 互不相同的儿子,贡献为

uBxson(u)f(x)yson(u)f(y)xson(u)fx2=uBgu2uWfu2

发现每次删点时只会改变 u1/2/3 级祖先,每次 O(1) 修改,复杂度为并查集的 O(nlogn).

A Dance of Fire and Ice

Solution#

opt=0 的操作只有最后一个有用,所以只需要考虑 opt=1 的操作是否选择,由于取模为质数可以将模 p 的乘法运算转化为离散对数的模 p1 的加法运算,问题等价于求下面多项式的非零项个数(其中乘法运算是模 p1 的循环卷积)

(1+opti=0xvi)opti=1(1+xvi)

考虑背包 DPO(np) 的复杂度,背包每次会转移过多无效状态,考虑优化。

有效状态为 ax=1a(x+vi)mod(p1)=0,因为满足 ax=1a(x+vi)mod(p1)=0 和满足 ax=0a(x+vi)mod(p1)=1x 的数量相同,我们可以每次考虑 axa(x+vi)mod(p1) 的所有 x,不难发现这样的转移次数是 O(p) 的。考虑每次二分比较 [l,r][l+vi,r+vi] 是否相同,可以得到每次转移的 x,比较区间相同可以用树状数组维护 Hash 比较,总复杂度为 O(plog2p+n).

「CF1086F」Forest Fires

Link#

Solution1#

带权不好求考虑转化为 (t+1)F(t)i=0tF(i) 其中 F(x) 表示在 x 时刻着火格子数目。

F(x) 相当于所有点在 x 时刻构成的着火矩形的并。

如果所有点的相交情况不变的话则有 F(x) 的二阶差分为常数,设矩形 i,j 相交时间为 p(i,j),所有的 p(i,j)F(x) 分为 O(n2) 段,每段为一个二次多项式,每段前缀和为三次多项式,直接 Lagrange 插值即可。

时间复杂度瓶颈在于求矩形并,可以扫描线 O(nlogn),总时间复杂度为 O(n3logn),足以通过原题。

Solution2#

搬题人把原题加强到了 n2000,考虑更优的做法。Lagrange 插值做法存在扫描线的瓶颈,考虑其他思路。

矩形交可以转化为矩形并的容斥设 F(S,t) 为考虑点集 S 中点时刻 t 的矩形交

(t+1)F(t)i=0tF(i)=(t+1)S(1)|S|+1(F(S,t)i=0tF(S,i))

我们令 g(S)=F(S,t)i=0tF(S,i) 考虑如何快速算出。

对于 S,T 满足 maxuS,vS|xuxv|=maxuT,vT|xuxv|maxuS,vS|yuyv|=maxuT,vT|yuyv|g(S)=g(T),我们可以发现如果一个有 a 个点确定的矩形中存在不参与确定矩形边界的点集 S 如下图所示,则贡献为 k=0|S|(|S|k)(1)k+1=[|S|=0]

所以可以发现当左右边界确定后,唯一可以满足要求的点是 E,Fy 坐标的前驱后继

所以可以将点按 x 排序,枚举确定左边界点和右边界点的点,用 multiset 维护点的前驱后继维护贡献。

如何计算一个矩形的 g(S),其等价于考虑以矩形 4 个点为点集的 g(S),为一个三次分段函数,Lagrange 插值即可。

总时间复杂度为 O(n2logn).

Walk

考虑如何处理平方,可以转换

f(S)=(pSw(p))2=pSqSw(p)w(q)

我们可以考虑有序路径对 (p,q) 的贡献为 w(p)w(q)2n|pq|.

考虑 DP,设 f(u,v) 为路径 p 终点为 u,路径 q 终点为 v 的贡献,我们可以扩展 uuv 同理),考虑转移式

f(u,v)=12f(u,v)wu[uq]+f(u,v)wu[uq]

如果我们要将 u 是否属于路径 q 记录在状态上我们至少用 O(2n) 的状态描述,但是 DAG 我们可以钦定合理转移顺序。具体我们每次钦定转移拓扑序较小的点转移即可。复杂度为 O(n2+m).

作者:littlepinkpig

出处:https://www.cnblogs.com/littlepinkpig/p/17813921.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

你可以在这里自定义其他内容

作者:littlepinkpig

出处:https://www.cnblogs.com/littlepinkpig/p/17813921.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   little_pinkpig  阅读(32)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu