codechef TREEWALK

题意

给定一棵\(n\)个点的树,要求每个点到\(r\)距离为\(K\)的路径个数

做法一

换个东西,改成从\(r\)出发,然后距离\(K\)走到每个点
\(O(n^2)\)求出特征多项式,论文
然后\(A^k=\sum\limits_{i=0}^{n-1}c_iA^i\)
\(A\)中只有\(O(n)\)个位置有值,\((A^{i+1})_{r,x}(x\in [1,n])\)可以通过\((A^i)_{r,x}(x\in [1,n])\)\(O(n)\)递推过来

做法二

这个东西是有线性递推式的,说详细点

\(S(A^k)\)表示\(A^k\)上某些位置的和,这个关于\(k\)是有线性递推的
然后先只考虑一个位置\((i,j)\),要维护的东西是一行,然后仿佛乘上\(A\),这显然是个线性递推
在考虑进所有的位置,乘上\(A\)压起来表示显然都是一样的嘛

然后大力BM插就好了

题外话

做法一是官方题解,限于此题,就没看了,感兴趣的就去看下吧,应该还挺好玩的

posted @ 2020-05-10 21:15  Grice  阅读(142)  评论(0编辑  收藏  举报