「考试」省选95
T1
大神说是打个表找规律啥的。
我利用生成函数+吉夫特那个题的结论推出来类似的结论。
就是说对于所有深度为\(i\)的点,其对答案有贡献,当且仅当\(t\&i=0\)。
这样的话就可以直接用一个\(orFWT\)来做了。
T2
生成树计数原题。
比原题还简单。
可以把\(a_i\)抽象成一个点变成一个含有\(a_i\)个点的连通块。
然后按照那个题一样的方法来做了就可以。
推式子部分比原题还简单。
剩下的就是一个分治\(FFT\)求数列\(k\)次和。
复杂度就是\(O(nlog^2n)\)的。
用了\(exp\)所以常数稍微大一点。
生成函数+\(prufer\)来把序列给用\(egf\)搞出来的套路很重要。
T3
好恶心好难写啊。
我们发现对于一条路径来说,点的个数-边的个数,那么对于一条路径来说,只需要把边权\(-w\),点权\(+w\)就可以了。
这样做一个最长路径\(dp\)就可以了。
这个东西不好做。
用树链剖分来搞重链上的最大子区间。
轻链部分对于每个轻链的父亲均存一个堆。
用这个存除了重儿子意外的所有轻儿子的贡献。
这样用堆中的最大和次大值就可以更新答案了。