染色问题相关
染色问题是一类经典的二项式反演问题。
问题 \(1\)
求 \(n\) 个格子,\(k\) 种颜色,相邻格子颜色不同,且每个颜色至少出现一次,求方案数。
设 \(g_k\) 表示恰好出现 \(k\) 个颜色的方案数,\(f_k\) 表示至多出现 \(k\) 个颜色的方案总数,若第 \(i\) 位为颜色 \(j\),第 \(i+1\) 位能选择除了颜色 \(j\) 以外的所有颜色。所以 \(f_k=k\times (k-1)^{n-1}\)。对于恰好出现 \(i\) 个颜色的情况,有 \(\binom{k}{i}\) 种颜色的选择方案。所以 \(f_k=\sum\limits_{i=0}^k\binom{k}{i}g_i\),反演得到 \(g_k=\sum\limits_{i=0}^k(-1)^{k-i}\binom{k}{i}f_i\)。总复杂度为 \(O(k\log n)\)
问题 \(2\)
求 \(n\times m\) 个格子,\(1\) 种颜色,每行每列至少有一个格子被染色,求方案数。
设 \(g_{i,j}\) 表示恰好有 \(i\) 行 \(j\) 列有格子被染色,\(f_{i,j}\) 表示至多有 \(i\) 行 \(j\) 列被染色的方案,一个节点可以选择是否被染色,\(f_{i,j}=2^{i\times j}\),从 \(n\) 行中选出 \(n-i\) 行被染色,方案有 \(\binom{n}{n-i}\) 种,再从 \(m\) 列中选出 \(m-j\) 列被染色,方案有 \(\binom{m}{m-j}\) 种。\(f_{n,m}=\sum\limits_{i=0}^n\sum\limits_{j=0}^m\binom{n}{i}\binom{m}{j}g_{i,j}\),反演得到 \(g_{n,m}=\sum\limits_{i=0}^n\sum\limits_{j=0}^m(-1)^{n-i+m-j}\binom{n}{i}\binom{m}{j}f_{i,j}\)
问题 \(3\)
求 \(n\times m\) 个格子,\(c\) 种颜色,每行每列至少有一个格子被染色,每种颜色至少出现一次,求方案数。
设 \(g_{i,j,k}\) 表示恰好有 \(i\) 行 \(j\) 列被染色且染了恰好 \(k\) 种颜色,\(f_{i,j,k}\) 表示至多有 \(i\) 行 \(j\) 列被染色且染了至多 \(k\) 种颜色,一个节点可以不染色或染任意一种颜色,\(f_{i,j,k}=(k+1)^{ij}\)。\(f_{n,m,c}=\sum\limits_{i=0}^n\sum\limits_{j=0}^m\sum\limits_{k=0}^c\binom{n}{i}\binom{m}{j}\binom{c}{k}g_{i,j,k}\),反演得到 \(g_{n,m,c}=\sum\limits_{i=0}^n\sum\limits_{j=0}^m\sum\limits_{k=0}^c(-1)^{n-i+m-j+c-k}\binom{n}{i}\binom{m}{j}\binom{c}{k}f_{i,j,k}\)
可以自然地总结出一个套路,先钦定恰好,再由恰好得到至多,这个至多一般是比较好算的,再反演得到由至多推的恰好的式子,这样起码可以得到一个poly而不是质数级的式子,剩下的部分再通过其它数学手段求得。
文章参考并补充总结自:
- Alex_Wei 反演与狄利克雷卷积二项式反演部分
- Icyfrog 二项式反演入门染色问题部分

浙公网安备 33010602011771号