【模板】Pólya 定理

本人过于垃圾,证明啥都不会,只会背结论。

这个定理一般是用来做形如"给 \(n\) 个点染色,有一些方案会重复" 这样的问题。

首先一个比较简单的概念是置换,一个置换 \(p\) 的作用就是把一个排列 \(a\)\(a_i\) 变成 \(a_{p_i}\)

然后这个定理说的就是

\[|X/G|=\frac{1}{|G|}\sum_{g\in G} |B|^{c(g)} \]

这是啥意思呢,就是有一个集合 \(A\) 和一个集合 \(B\) ,也就是相当于 \(A\) 是点集,\(B\) 是颜色集合,\(G\) 表示所有的 \(A\)\(B\) 的映射的置换所构成的集合,这个集合是钦定的,也就是会重复置换的集合,\(X\) 是不考虑重复的全部染色方案。

\(|X/G|\) 表示 \(X\) 中的染色方案在 \(G\) 这个重复条件下的方案数,也就是我们要求的答案。

枚举其中的一个 \(g\) 就是枚举其中会造成重复的一个置换。

\(c(g)\) 就是对于 \(g\) 这个置换,它的置换环个数。

证明不会,可以看相关资料。

P4980 模板题。

\(n\) 个点的环染 \(n\) 个颜色,求本质不同染色数,\(n\le 10^9\)

考虑本质相同的置换集合 \(G\) 是啥,显然里面就是 \(n\) 个置换,\(g_i\) 就是把 \(a\) 循环移动 \(i\) 格。

也就是 \(g_i=\{i+1,i+2...n,1,2,..i\}\)

考虑这个东西的置换环数量,容易发现是 \(\gcd(i,n)\)

那么就可以直接来了。

\[|X/G|=\frac{1}{|G|}\sum_{g\in G} |B|^{c(g)}\\ =\frac{1}{n}\sum_{i=1}^n n^{\gcd(n,i)}\\ =\frac{1}{n} \sum_{d|n} n^d \varphi(\frac{n}{d}) \]

直接暴力算 \(\varphi\) 就好了。

code

posted @ 2022-07-11 20:37  houzhiyuan  阅读(58)  评论(0编辑  收藏  举报