20160403模拟

T1 小 R 的数学题(math)

题目大意

n,m

i=1nim(mod1e9+7)

15pt:n106,m5103
35pt,n109,m=2,3,4,5
25pt,n109,m200
25pt,n109,m5000

题解

15pt 可以直接暴力
35pt,m20035pt
我们推一下当 m=2 时的式子,设 Sn=ni=1i2 ,对原式扰动一下

(n+1)2+Sn==i=0n(i+1)2i=0ni2+2i=0ni+(n+1)

Sn,ni=1i,
Tn=ni=1i3
(n+1)3+Tn3Sn====i=0n(i+1)3i=0ni3+3i=0ni2+3i=0ni+(n+1)(n+1)33i=0ni(n+1)n3+32n2+12n

我们定义 fm(n)=ni=1im
(n+1)m+1+fm+1(n)fm(n)======1+i=1n(i+1)m+11+i=1nj=0m+1(m+1j)ij1+j=0m+1(m+1j)i=1nij1+j=0m+1(m+1j)fj(n)1+fm+1(n)+(m+1m)fm(n)+j=0m1(m+1j)fj(n)(n+1)m+11m+11m+1j=0m1(m+1j)fj(n)

mm,O(m3)
优化到 O(m2) 需要伯努利数,具体参见杜教的《多项式及求和》或具体数学吧
如果你不会伯努利数我们来看观察一下上面得出的公式
1f0(3)=(411)10
2f1(3)=(421)1(20)f0(3)
3f2(3)=(431)1(40)f0(3)1(41)f1(3)
没错!!上面算法的瓶颈在于多项式计算!!!带成数值就可以优化掉一个 m 了!!!
CODE

T2 最短路(path)

题目大意

给定一棵树,每次的询问独立,添加一条边,询问有多少点对的最短路变小了

题解

一棵基环树,我们找到环之后,如果环上两点的最短距离改变的话,他们的子树中不在环上的部分的最短距离也会改变,所以预处理出每个点子树大小,因为树高不超过100,所以找环的复杂度不会很高,找到环之后处理出最短路改变的即可,子树大小乘起来计入答案,细节就慢慢思考吧~~

T3 最小花费(cost)

题目大意

给定一棵树,每次询问从s走到t,选择点权最小的点购买到下一个最近的且比该点点权小的点的路径长度的食物,询问花费数

题解

预处理倍增表
up1[i,j]:ii2j1fa,
up2[i,j]:ii2j1fa,
down1[i,j]:i2j1fai,
down2[i,j]:i2j1fai,
合并时
up1[i,j]=min{up1[i,j1],up1[fa[i,j1],j1]}
pos=pos(up1[i,j1])
由于最小值具有单调性,所以 pos 值可以二分求解
up2[i,j]=up2[i,j1]+up1[i,j1]dis(fa[i,j1],fa[i,j])up2[i,j1]+up1[i,j1]dis(fa[i,j1],pos)+up1[fa[i,j1],j1]dis(pos,fa[i,j])up1[i,j1]up1[fa[i,j1],j1]up1[i,j1]>up1[fa[i,j1],j1]
down1[i,j]=min{down1[i,j1],down1[fa[i,j1],j1]}
pos=pos(down1[fa[i,j1],j1])
由于最小值具有单调性,所以 pos 值可以二分求解
down2[i,j]=down2[fa[i,j1],j1]+down1[fa[i,j1],j1]dis(i,fa[i,j1])down2[fa[i,j1],j1]+down1[fa[i,j1],j1]dis(fa[i,j1],pos)+down1[i,j1]dis(pos,i)down1[i,j1]down1[fa[i,j1],j1]down1[i,j1]<down1[fa[i,j1],j1]
预处理出这些之后,对于每个询问 (s,t)
注意下面小括号的是用倍增处理出来的,不是指数组
lsum=up2(s,lca)
lmin=up1(s,lca)
rsum=down2(lca,t)
rmin=down1(lca,t)
pos=pos(lmin)lcatlmin
ans={lsum+lmindis(lca,t)lsum+lmindis(lca,pos)+rmindis(pos,t)lminrminlmin>rmin
O(Nlog2N)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值