大概是北大集训的某道题?我感觉挺有意思的,随便写写。
原题需要先矩阵树定理转化成循环矩阵求行列式。我们直接跳过矩阵树 虽然我根本没想到矩阵树 考虑行列式咋求。
首先定义 (n imes n) 的循环矩阵 (A),满足 (A_{i,j} = a_{(i-j)mod n})。下文为了方便,省去下标中的取模。
考虑矩阵乘法 (C = AB),其中 (A, B) 都是循环矩阵,则有 (C_{i,j}=sum_{k=0}^{n-1}a_{i-k}b_{k-j})。
注意到 (C) 也为循环矩阵,对应的 (c) 可以通过 (c_{i+j} = sum a_ib_j) 算出。
注意这里下标要取模,所以得到循环矩阵的乘法可以描述为多项式的循环卷积。
对于两个多项式 (f(x)=a_0+a_1x+dots+a_{n-1}x^{n-1}) 与 (g(x) = b_0 + b_1x + dots + b_{n-1}x^{n-1}),循环卷积还可以用 DFT 描述。
即:若 (h(x) = f(x)circ g(x)) 是两者循环卷积的结果,则有 (h(omega_{n}^i)=f(omega_{n}^i)g(omega_{n}^i))。
将矩阵乘法转化成 (n) 个值对应相乘,不难想到这 (n) 个值是该矩阵的特征值。事实上,循环矩阵是可对角化的:
[X =
egin{pmatrix}
omega^{0 imes 0}_n & omega^{0 imes 1}_n & dots & omega^{0 imes (n-1)}_n \
omega^{1 imes 0}_n & omega^{1 imes 1}_n & dots & omega^{1 imes (n-1)}_n \
vdots & vdots & ddots & vdots \
omega^{(n-1) imes 0}_n & omega^{(n-1) imes 1}_n & dots & omega^{(n-1) imes (n-1)}_n \
end{pmatrix}
\
D =
egin{pmatrix}
f(omega^0_n) & 0 & dots & 0 \
0 & f(omega^1_n) & dots & 0 \
vdots & vdots & ddots & vdots \
0 & 0 & dots & f(omega^{n-1}_n) \
end{pmatrix}
\
A = XDX^{-1}
]
知道所有特征值后,行列式 (det A = prod lambda_i = prod f(omega_n^i))。还可以验算矩阵的迹 (mathrm{tr} A = sum f(omega_n^i) = n imes a_0)。
solution 给的做法本质上就是这个。
现场好像说还可以用结式解释,但是我不会。那就先留个坑。