[CF750G]New Year and Binary Tree Paths
Posted StaroForgin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CF750G]New Year and Binary Tree Paths相关的知识,希望对你有一定的参考价值。
New Year and Binary Tree Paths
题解
很显然,路径分单链与非单链两种情况,我们可以分别考虑两者。
对于单链:
我们考虑一个长度为
h
h
h的链从点
x
x
x出发全部往左儿子走回的编号和,
∑
i
=
0
h
−
1
2
i
x
=
(
2
h
−
1
)
x
\\sum_{i=0}^{h-1}2^ix=(2^h-1)x
∑i=0h−12ix=(2h−1)x。
如果我们在链上高度为
y
y
y的地方向右儿子走,那么总的贡献会增加
∑
i
=
0
y
−
1
2
i
=
2
y
−
1
\\sum_{i=0}^{y-1}2^i= 2^{y}-1
∑i=0y−12i=2y−1
我们设序列
t
t
t表示点
x
x
x在整个过程中在什么位置会向左儿子走,那么从点
x
x
x出发的长度为
h
h
h的链的总贡献为
∑
i
=
0
h
−
1
2
i
x
+
∑
i
=
0
h
−
1
t
i
(
2
i
−
1
)
⩽
(
2
h
−
1
)
x
+
2
h
−
h
<
(
2
h
−
1
)
(
x
+
1
)
\\sum_{i=0}^{h-1}2^ix+\\sum_{i=0}^{h-1}t_{i}(2^i-1)\\leqslant (2^h-1)x+2^{h}-h<(2^h-1)(x+1)
∑i=0h−12ix+∑i=0h−1ti(2i−1)⩽(2h−1)x+2h−h<(2h−1)(x+1)。
所以对于不同的
h
h
h,我们的起始点
x
x
x是与之一一对应的,
x
=
⌊
s
2
h
−
1
⌋
x=\\left \\lfloor\\frac{s}{2^h-1}\\right\\rfloor
x=⌊2h−1s⌋。
我们只需要判断从当前的
x
x
x出发,能否走到一个点使得编号总和为
s
s
s。也就相当于我们用不同的
2
i
−
1
2^i-1
2i−1能否组合出
s
−
(
2
h
−
1
)
x
s-(2^h-1)x
s−(2h−1)x。
由于
2
i
−
1
>
∑
j
=
0
i
−
1
(
2
j
−
1
)
=
2
i
−
i
2^i-1>\\sum_{j=0}^{i-1}(2^j-1)=2^{i}-i
2i−1>∑j=0i−1(2j−1)=2i−i,所以我们可以用贪心的方法判断,如果
t
t
t不小于当前的
2
i
−
1
2^i-1
2i−1,就将它减去,看最后能否去到
0
0
0。
对于其它任意路径
显然,我们可以将它转化成一个点延申出两条单链的形式。
我们设点
x
x
x延申出的两条单链长度分别为
h
1
h_1
h1和
h
2
h_2
h2,全向左儿子走,那我们的和就为
(
2
h
1
+
2
h
2
−
3
)
x
+
2
h
2
−
1
−
1
(2^{h_1}+2^{h_2}-3)x+2^{h_2-1}-1
(2h1+2h2−3)x+2h2−1−1。
同样,对于固定的
(
h
1
,
h
2
)
(h_1,h_2)
(h1,h2)来说,点
x
x
x也是固定的。
我们只需要判断我们的
∑
i
=
0
h
1
−
2
t
1
,
i
(
2
i
−
1
)
+
∑
i
=
0
h
2
t
2
,
i
(
2
i
−
1
)
\\sum_{i=0}^{h_1-2} t_{1,i}(2^{i}-1)+\\sum_{i=0}^{h_2}t_{2,i}(2^i-1)
∑i=0h1−2t1,i(2i−1)+∑i=0h2t2,i(2i−1)能否构造出
s
−
(
2
h
1
+
2
h
2
−
3
)
x
−
2
h
2
−
1
+
1
s-(2^{h_1}+2^{h_2}-3)x-2^{h_2-1}+1
s−(2h1+2h2−3)x−2h2−1+1即可。
但显然,如果全是
2
i
−
1
2^i-1
2i−1的形式的话,我们是并不好维护的,我们可以枚举选择了多少个
2
i
−
1
2^{i}-1
2i−1,如果选择了
n
n
n个,就将我们的
s
s
s加上
n
n
n,之后就只用看每个
2
i
2^i
2i选择了几个就行了。 以上是关于[CF750G]New Year and Binary Tree Paths的主要内容,如果未能解决你的问题,请参考以下文章 性质分析+数位DPCF750G New Year and Binary Tree Paths CF 750C New Year and Rating(思维题) CF1284E New Year and Castle Construction CF1284E New Year and Castle Construction
这一块可以对于二进制位数位
d
p
dp
dp来维护。
我们定义
d
p
i
,
j
,
S
dp_{i,j,S}
dpi,j,S表示前
i
i
i位选择了
j
j
j个
2
2
<