一个看起来挺经典的题。
n≤40,m≤105我们可以先考虑只有两种颜色的情况。比如只有 Red and Blue。
我们设红边权值为 1 ,蓝边权值为 x ,那么我们可以写出一个生成函数 F(x) ,并且可以设 xi 的系数是选择正好 i 条蓝色边的方案数量,也就是选择正好 i 条边的答案。
只要求出这个多项式的系数就好了。于是我们可以考虑对 F(x) 在 0…n 插值,插出 n+1 个点值拉格朗日插值即可。插值的过程其实就是一个求生成树个数的过程,直接上矩阵树定理,复杂度 O(n4)。
加入绿色边后能不能一样地做呢?我们可以设绿色边的边权是 xn ,那么总生成函数长度就是 O(n2) ,同样插值即可,复杂度 O(n5)。
其实今天貌似是第一次做拉格朗日插值。。我们设
ℓj(x)=∏i≠jx−xjxi−xjf(x)=n∑i=1yiℓi(x)然后我们可以先求出 ∏x−xj 然后做多项式除法求 ℓi ,这样做复杂度就是 O(n2)。
cpp
1 |
|