因为不太想写长篇笔记就随便记篇题解吧……
我们考虑一个图 G=(V,E) 的 Tutte 多项式 TG(x,y)=∑A⊆E(x−1)k(A)−k(E)(y−1)k(A)+|A|−|V|
容易知道指数都是非负的,因此我们可以尝试给出一个在任意环上的算法。
首先我们知道其 Tutte 多项式等价于每个连通分量的 Tutte 多项式的乘积。因此不妨先假设 G 为连通图。
考虑 A 作为边集时的一个连通分量 S,令其导出子图的边集为 B,则定义其权值 fS(B)=(y−1)k(B)+|B|−|S|=(y−1)|B|−(|S|−1)
于是对于 A,其在 G 的 Tutte 多项式中的贡献即为各个连通分量的 f 的乘积乘上 (x−1)k(A)−k(E)=(x−1)k(A)−1。
因此若定义 gS 为 ∑fS(B),其中 B 使得 S 为一个连通分量,则 G 的 Tutte 多项式即为 [wV]∑i≥1(x−1)i−1(∑S≠∅gSwS)ii!
这个地方乍一看要算任意 EGF 复合一个集合幂级数(虽然也是可做的),但是我们考虑给每个 gS 乘进一个 x−1,然后想办法除掉一个贡献(比如强制去掉编号最小的结点所在连通分量的贡献)即可转化为 exp。
并且,容易发现这个东西可以直接扩展到任意图上而不需要其他操作。
然后下一步是求出 gS。考虑进行逐点牛顿迭代。
对于 S∋n,考虑从 S 中删去 n 所构成的连通分量。
若一个连通分量与 n 连有 m 条边,则其贡献为
\sum\limits_{i=1}^m \binom mi (y-1)^i = y^m-1
然后由于新加入的点,需要另外除以一个 y-1。有趣的是由于这个东西恰好就是等比数列求和,所以可以方便地预处理。
时间复杂度 O(n^2 2^n)。
代码:
1 |
|