「THUPC2018」淘米神的树 / Tommy

题意简述:

https://loj.ac/problem/6391

题解:

前置知识:多项式多点求职
不在链\((a,b)\)上的点,对答案的贡献恒为\(\frac{1}{Size}\)。预处理即可。
如果要枚举链上最后一个被染红的点,很难算。
发现如果枚举没有用过(用过指一边的点染红后通过这条边将另一边的点染黑)的边,会很好算,而且每种情况刚好算2次。
假设链上有maxn个点,前i个点子树大小为\(sm_i\),枚举\(<A_i,A_{i+1}>\)的贡献即为\(\frac1{\prod_{i!=j}|sm_i-sm_j|}=\frac1{\sum_{0\leq i\leq maxn}\prod_{i!=j}|sm_i-sm_j|}\)
\(F(x)=\sum_{0\leq i\leq maxn}\prod_{i!=j}(x-sm_j),\)贡献即为\(\frac{(-1)^{maxn-i}}{F(sm_i)}\)
只需要求出\(F(x)\),然后多项式多点求值即可。
一个小优化是,\(F(x)\)就是\(\prod_{0\leq i\leq maxn}(x-sm_i)\)求导的结果,证明可以考虑每一项的贡献。这样多点求值预处理后就能算出\(F(x)\)

代码:

https://loj.ac/submission/684315

posted @ 2019-11-28 19:17  蒟蒻小果冻  阅读(290)  评论(0编辑  收藏  举报