2023.01.12 模拟赛小结

更好的阅读体验戳此进入

赛时思路

T1

LG-P3978 [TJOI2015]概率论

求随机的 n 个点的二叉树的期望叶子节点个数。

最开始的思路是 dp(i,j,k) 表示前 i 个点,j 个叶子 k 个仅有一个子节点的点的期望。然后想了一个似乎较为显然的 3D0D 的 DP,不过假了,主要是因为一个子节点中左右是不固定的,这样对于方案数是错误的,一直没想到什么好方法,一个多小时以后才反应过来可以直接从枚举树的左右节点转移,这样可以考虑期望转计数,即:令 dp(i) 表示 i 个点所有方案叶子节点总数,tot(i) 表示方案数,转移枚举一下左右子树大小即可,然后打表发现后者是卡特兰数,前者是 dp(i)=i×tot(i1),后者的证明需要阴间拉格朗日反演,不会,所以考虑找规律即可,规律较显然。然后将 dp(i)tot(i) 化简一下即为 n2+n4n2,本来最后的式子都写出来了,但是因为输出的时候 n×4 想当然认为是 int 范围内,但是 4e9 炸掉了,所以 100pts70pts

关于具体的证明,准备在补完 ABC266Ex,写完可持久化文艺平衡树和序列加强版之后再去补生成函数相关内容。

Code

T2

LG-P4211 [LNOI2014]LCA

给定 n 个节点的有根树,m 次询问给定 l,r,zi=lrdep(LCA(i,z))

以前没见过这种套路,想了一会能想到的只有离线下来 Tarjan 求 LCA,这样最终复杂度是 O(nm) 的,理论上在模拟赛的数据下能过 40pts,然后空间消耗巨大,根据数据需要 1GiB2GiB 左右(所以让 @sssmzy 调大了点空间

然后最后耗时 1030ms,刚好 TLE,甚至跑不过 @cc0000 的 O(nmlogn) 的树剖(因为 @sssmzy 的数据随机生成,所以树剖和纯暴力期望都是可以艹过去的)(当然最后又让 @sssmzy 开大了点时间

Code

T3

LG-P6621 [省选联考 2020 A 卷] 魔法商店

及其阴间的保序回归,经典 @sssmzy 组的模拟赛中的科技题,感觉暴力都不是很可写,跳了跳了。

正解

T1

上面提过了,4×n 没转 long long

Code

T2

正解看到之后会发现非常显然,但是如果要直接想却不太容易想到,应该算是一种套路。

考虑对区间 [l,r] 中的点到根的路径 +1,此时对于询问的 z,若求其到根节点路径上的数值和即为所求。简单想一下不难理解。

不难想到 树剖 + 线段树 维护,这样的复杂度是 O(qnlog2n) 的,不能通过。

于是考虑将询问转成差分形式,即拆成 [1,l1][1,r] 的前缀询问,离线排序后挂在点上,从 1n 依次进行路径加,对应点进行询问即可,此时复杂度即可优化至 O(nlog2n),可以通过。

需要注意本题点的编号的问题。

Code

T3

跳!

UPD

update-2023_01_12 初稿