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