标签:大小 结果 效率 不同 端点 要求 定向 子集 复杂度
对于无向简单图 \(G(V,E)\),我们试图求出 \(P(G,t)\) 表示给予 \(G\) 中每个顶点一个处于 \([1,t]\) 间的标号,使得一条边连接的两个端点标号不同的方案数。
首先我们试图说明 \(P(G,t)\) 是关于 \(t\) 的首一 \(|V|\) 次整系数多项式,这将同时给出一个复杂度为 \(O(1.618^{|V|+|E|}(|V|+|E|))\) 的求解算法。
求解色多项式方法的重要方法是图收缩。不妨考虑图中的一条边 \((u,v)\),令 \(G_1\) 表示删去 \((u,v)\) 这条边的新图,\(G_2\) 表示收缩 \((u,v)\) 为一个新点后的新图(收缩会合并 \(u\) 和 \(v\) 的点和出边并删去重边)。相当直观的,有 \(P(G,t)=P(G_1,t)-P(G_2,t)\),于是方案数是个多项式显然归纳可得,我们称其为色多项式。限于作者水平,本文基本不探讨色多项式的代数性质和系数性状。
考虑点数与边数之和的变化,上述复杂度显然。如果当 \(G\) 不连通时直接递归入每个连通块,并根据图的稠密程度选择该递推式或补图的递推式,实际效率很高。
上面提到了图收缩,下面将完善这一点。考虑缩掉度数不超过 \(2\) 的点。
对于一棵树,每次缩掉一度点的过程会一直持续,从而易得树的色多项式为 \(t(t-1)^{|V|-1}\)。如果我们指定不缩去树上的一个点集,那么以上收缩过程结束时,剩余的是该点集的虚树。
从而在一个 \(|E|-|V|\) 不大的一般图上,收缩的点集结果便是其某个生成树上所有作为某条非树边端点的虚树。这样点数并不超过 \(2(|E|-|V|+1)\)。在新图中跑暴力可得到 \(O(4.236^{|E|-|V|}(|E|-|V|))\) 或 \(O(4^{|E|-|V|}(|E|-|V|)^2)\) 的复杂度。暴力枚举所有非树边顶端的点(使用 DFS 树)的颜色划分后进行树 DP,复杂度变为 \(O((|E|-|V|)^2\text{Bell}(|E|-|V|+1))\)。
以上我们主要使用图论方法计算色多项式,下面我们考虑更为贴近 OI 的方法——容斥原理。对于边集的每一个子集,计算 \(-1\) 的子集大小次方乘以 \(t\) 的这个子集构成的连通块数量次方之和即为所求。考虑递推,令 \(f_S\) 表示所有导出子图为点集 \(S\) 的边集的上式之和。
于是我们得到了一个复杂度为 \(O(2^n \times n^2)\) 的算法。比对不同算法的过程,可以发现图的无环定向数即为将 \(-1\) 代入色多项式的值乘上 \((-1)^{|V|}\)。
下面我们探讨一些特殊图的色多项式。
标签:大小 结果 效率 不同 端点 要求 定向 子集 复杂度
原文地址:https://www.cnblogs.com/rushcheyo/p/10727190.html