传送门 题意: 染色图是无向完全图,且每条边可被染成k种颜色中的一种.两个染色图是同构的,当且仅当可以改变一个图的顶点的编号,使得两个染色图完全相同.问N个顶点,k种颜色,本质不同的染色图个数(模质数N≤53,P<109). 想了一节课和一中午又看了课件 相同类型的循环合并的想法很巧妙 首先,点的置换对应唯一边的置换,我们可以枚举所有点的置换,找出每个置换下边置换的循环有多少个,然后套$Polya$公式 但是复杂度带叹号 我们发现,很多点置换类型是一样的,我们可以对$n$搜索划分来枚举点置换的类…
1815: [Shoi2006]color 有色图 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 136  Solved: 50[Submit][Status] Description Input 输入三个整数N,M,P 1< = N <= 53 1< = M < = 1000 N< P < = 10^ 9 Output 即总数模P后的余数 Sample Input input 1 3 2 97 Sample Output…
参考 https://wenku.baidu.com/view/fee9e9b9bceb19e8b8f6ba7a.html?from=search### 的最后一道例题 首先无向完全图是个若干点的置换,但是实际上要染色边,也就是要求边的置换 首先,通过dfs构造一个点的置换,然后再把每个置换分割加起来就是答案(实际上分割方案很少) 那么现在有一个点置换的长度(a1,a2,a3...),考虑边置换,一条边(pi,pj),如果pi,pj在不同的置换里,那么显然循环节是lcm(ai,aj),所以循环个…
题意 如果一张无向完全图(完全图就是任意两个不同的顶点之间有且仅有一条边相连)的每条边都被染成了一种颜色,我们就称这种图为有色图. 如果两张有色图有相同数量的顶点,而且经过某种顶点编号的重排,能够使得两张图对应的边的颜色是一样的,我们就称这两张有色图是同构的. 对于计算所有顶点数为 \(n\) ,颜色种类不超过 \(m\) 的图,最多有几张是两两不同构的图. 数据范围 \(n \le 53, 1 \le m \le 1000\) 题解 神仙题qwq 我们考虑对于点置换与其对应的边置换的关系: 对…
BZOJ1815: [Shoi2006]color 有色图 Description Input 输入三个整数N,M,P 1< = N <= 53 1< = M < = 1000 N< P < = 10^ 9 Output 即总数模P后的余数 Sample Input input 1 3 2 97 Sample Output output 1 4 题解Here! 经典Polya计数. 不想再写一遍了,正解戳这里.…
题目传送门:洛谷 P4128. 计数好题,原来是 13 年前就出现了经典套路啊.这题在当年应该很难吧. 题意简述: \(n\) 个点的完全图,点没有颜色,边有 \(m\) 种颜色,问本质不同的图的数量对质数 \(p>n\) 取模. 本质不同指的是在点的 \(n!\) 种不同置换下不同. 题解: 首先有 \(\mathrm{P\acute{o}lya}\) 定理:一类元素在一个置换群的作用下本质不同的元素(不同等价类)个数等于 \(\frac{1}{|G|}\sum_{g\in G}M(g)\).…
题意 用 \(m\) 种颜色,给 \(n\) 个点的无向完全图的 \(\frac{n(n-1)}{2}\) 条边染色,两种方案相同当且仅当一种方案交换一些点的编号后可以变成另一种方案.问有多少本质不同的染色方案. \(n\le 53, m\le 1000, n<mod\le 10^9\) 且 \(mod\) 为质数. 分析 考虑 \(Polya​\) 定理. 假设已经枚举了一个点置换(对应唯一一种边置换),能否快速求出对应边的置换的循环个数? 对于两个点的循环(设长度分别为 \(l_1,l_2\…
http://www.lydsy.com/JudgeOnline/problem.php?id=1815 这道题好难啊,组合数学什么根本不会啊qwq 题解详见08年的Pólya计数论文. 主要思想是只枚举具有代表性的点的置换,算出这些点的置换造成的边的置换的保持不变的着色数(边的置换的保持不变的着色数我想了一天啊_(:з」∠)_),最后再乘上与这种具有代表性的点的置换同类的点的置换总数就可以了. WA了好几次,中间一个地方忘取模了qwq #include<cstdio> #include<…
把连边和不连边看成黑白染色,然后就变成了 https://www.cnblogs.com/lokiii/p/10055629.html 这篇讲得好!https://blog.csdn.net/wzq_qwq/article/details/48035455 #include<iostream> #include<cstdio> using namespace std; const int N=65,mod=997; int n,m=2,fac[N],ans,a[N]; int gc…
题目链接:BZOJ - 1082 题目分析 二分 + DFS验证. 二分到一个 mid ,验证能否选 mid 个根木棍,显然要选最小的 mid 根. 使用 DFS 验证,因为贪心地想一下,要尽量先用提供的小的木木棍,尽量先做出需要的大的木棍,所以要先将提供的木棍和需要的木棍都排序. DFS 的时候是按照需要的木棍从大到小的顺序一层一层搜,每一层上是按照从小到大的顺序枚举提供的木棍.(当然枚举的时候已经不一定是从小到大了,有些木棍已经被截掉了一些.) 要使用两个有效的剪枝: 1)如果下一层的木棍和…