码迷,mamicode.com
首页 > 其他好文 > 详细

Chromatic polynomial

时间:2019-04-18 01:00:39      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:大小   结果   效率   不同   端点   要求   定向   子集   复杂度   

对于无向简单图 \(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\) 的点。

  • 度为 \(1\) 的点删去将乘上 \((t-1)\)
  • 当我们收缩去所有度为 \(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\) 的边集的上式之和。

  • \(S\) 的导出子图不连通,则 \(f_S\) 为其所有联通分量的 \(f\) 之乘积;
  • 否则便是计算 \(S\) 导出子图的边集有多少子集能使 \(S\) 联通,将这些容斥系数求和再乘上 \(t\)。这明显是经典的对集合幂级数求对数之应用。

于是我们得到了一个复杂度为 \(O(2^n \times n^2)\) 的算法。比对不同算法的过程,可以发现图的无环定向数即为将 \(-1\) 代入色多项式的值乘上 \((-1)^{|V|}\)

下面我们探讨一些特殊图的色多项式。

  1. 独立集、完全图、完全二分图及其复制、链、树、环等简单结构均可直接得到闭形式。
  2. 仙人掌使用收缩方式最后必然缩成一个点。可以直接在多项式时间中得到。
  3. 对于弦图,我们求出其一个完美消除序列后从左往右确定。一个点的颜色只要求和前面相连的点不同。由完美消除序列性质,前面和其相连的点是团,颜色必定不同,于是弦图的色多项式即为 \(\prod_u (t-d_u)\)\(d_u\) 表示 \(u\) 与完美消除序列前面多少个点相连。

Chromatic polynomial

标签:大小   结果   效率   不同   端点   要求   定向   子集   复杂度   

原文地址:https://www.cnblogs.com/rushcheyo/p/10727190.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!