闲话 24.7.1
闲话
写完整式递推了,已经merge进多项式板子了(
下一步是和老周特制ode自动机合并一下
于是就能让计算机自动帮我搞 \(O(\sqrt{n} \log n)\) 了(
什么?你问老周特制ode自动机什么时候来?先别急先别急
推歌:滴答滴答 by 星葵 et al. feat. 洛天依V5 Nature
抓住你的耳朵!
败祭
昨天 jjdw 水了一篇闲话。那我就来补完一下做法吧(
感谢大自然的馈赠
计数 \(n\) 个点的有标号有根树,满足点权为 \([1,m]\) 内整数,且满足大根堆性质。对 \(998244353\) 取模。
\(n\le 10^5, m \le 10^9\),时限 \(25s\)。
呃呃 这个加强版 我都觉得难蚌
令 \(F_k(x)\) 是根的权为 \(k\) 的树的个数的 EGF,则枚举一列无序合法子树容易得到:
也就是:
即 \(\dfrac{F_k}{\exp F_k}=F_{k-1}\)。上式同时指出了 \(F_1(x) = x \exp F_1(x)\),\(F_1(x)\) 为有标号有根树的生成函数,\([x^n/n!] F_1(x) = n^{n - 1}\)。
令 \(f(x) = xe^{-x}\),记 \(f\) 复合自身 \(k\) 次得到的函数为 \(f^{\langle k\rangle}\),我们知道 \(F_1(x) = f^{\langle m - 1 \rangle}(F_{m}(x))\),也就有 \(F_{m}(x) = f^{\langle 1 - m \rangle}(F_1(x))\)。下面只需要计算 \(f^{\langle m - 1\rangle}(x)\),随后求复合逆再复合即可得到 \(F_m(x)\)。
答案为
使用 \(O(n\log^2 n)\) 多项式复合(逆)技术,计算 \(f^{\langle m - 1\rangle}(x)\) 可以做到 \(O(n\log^2 n \log m)\),剩余的部分均非复杂度瓶颈。
所以计算 \(f^{\langle m - 1\rangle}(x)\) 还能不能加速啊?有思路的可以和我交流 😃
code
signed main() {
int n, k;
cin >> n >> k;
k --;
poly f1(n + 2);
rep(i,1,n + 1) f1[i] = 1ll * qp(i, i - 1) * gifc(i) % mod;
poly ans(n + 2), tmp(n + 2);
ans[1] = 1;
rep(i,1,n + 1) {
tmp[i] = gifc(i - 1);
if (!(i & 1)) tmp[i] = mod - tmp[i];
}
while (k) {
if (k & 1) ans = ans.composite(tmp);
tmp = tmp.composite(tmp);
k >>= 1;
}
ans = ans.composite_inv();
f1 = ans.composite(f1);
f1 = (f1 << 1).ln();
cout << 1ll * f1[n] * gfac(n) % mod << endl;
}
以下是博客签名,与正文无关。
请按如下方式引用此页:
本文作者 joke3579,原文链接:https://www.cnblogs.com/joke3579/p/18277469/chitchat240701。
遵循 CC BY-NC-SA 4.0 协议。
请读者尽量不要在评论区发布与博客内文完全无关的评论,视情况可能删除。