Description

求两两互不同构的含n个点的简单图有多少种。
简单图是关联一对顶点的无向边不多于一条的不含自环的图。
a图与b图被认为是同构的是指a图的顶点经过一定的重新标号以后,a图的顶点集和边集能完全与b图一一对应。

Solution

转化模型:给边 \(0/1\) 染色,如果为 \(1\) 则代表选择,求方案数
考虑一下这个题的置换实际上是边置换,而把边置换用到的节点集合拿出来,发现这些点集合也可以是点置换
于是我们想到用把边置换按照点置换归类

于是复杂度就从边数降到点数了,枚举点置换的复杂度实际上是求 \(n\) 的划分的复杂度,\(n=60\) 时,约为 \(10^6\) 级别
问题在于如何统计点置换中的边循环个数

利用 \(polya\) 公式:
\(L=\frac{1}{|G|}*\sum_{i∈ G} 2^k_i\)
\(k_i\) 是每一个置换的循环的个数

考虑边的两端点都在同一点置换的边置换个数
这个置换的要求是:经过每一个点至少一次且形成一个环
观察一个例子

我们可以走相邻的点(也就是红边)
或者隔两个点走一步(绿边)
然后发现隔三个点走的走出来的和绿边一模一样,于是算重了
于是总结出规律: 隔 \(i\)和\(n-i\) 个点走出来的边置换是一样的,所以边置换个数就是 \(\frac{n}{2}\)

再考虑两端点都不在同以点置换的边置换个数
我们反复横跳两个点置换,直到某个时刻都遍历完,循环的大小为 \(lcm(a,b)\),\(a,b\) 为两个循环的大小
因为总边数是 \(a*b\) ,所以循环个数就为 \(\frac{a*b}{lcm(a,b)}=gcd(a,b)\)

最后就只要统计点置换的个数了
容易发现就是: \(\frac{n!}{size[1]*size[2]*...*size[n]*t[1]!*t[2]!*...*t[n]!}\)
\(size\) 表示每一个点置换的大小, \(t[i]\) 表示大小为 \(i\) 的点置换的个数
因为点是一个环,所以多枚举了 \(size\) 次,另外对于大小为 \(i\) 的连通块出现了多次,相当于一个可重排列,除以 \(t[1]!\)

最后总置换个数是 \(n!\),要记得除

#include<bits/stdc++.h>
using namespace std;
const int mod=997,N=65;
int n,num=0,sz[N],w[N],Fac[N],ans=0;
inline int qm(int x,int k){int sum=1;while(k){if(k&1)sum=1ll*sum*x%mod;x=1ll*x*x%mod;k>>=1;}return sum;
}
inline int gcd(int a,int b){return b?gcd(b,a%b):a;}
inline void dfs(int B,int res){if(!res){int sam=1,tot=0;for(int i=1;i<=num;i++){tot+=sz[i]*(sz[i]-1)/2*w[i]+w[i]/2*sz[i];for(int j=i+1;j<=num;j++)tot+=sz[i]*sz[j]*gcd(w[i],w[j]);}for(int i=1;i<=num;i++)sam=sam*Fac[sz[i]]*qm(w[i],sz[i])%mod;sam=Fac[n]*qm(sam,mod-2)%mod;ans=(ans+qm(2,tot)*sam)%mod;return ;}if(B==n+1 || B>res)return ;dfs(B+1,res);for(int i=1;i*B<=res;i++){w[++num]=B;sz[num]=i;dfs(B+1,res-i*B);num--;}
}
int main(){scanf("%d",&n);Fac[0]=1;for(int i=1;i<=n;i++)Fac[i]=Fac[i-1]*i%mod;dfs(1,n);ans=ans*qm(Fac[n],mod-2)%mod;printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Yuzao/p/8486474.html

bzoj 1488: [HNOI2009]图的同构相关推荐

  1. BZOJ 1488 [HNOI2009]图的同构 Polya定理

    题意:链接 方法: Polya定理 解析: 先扯点题外话. 小雨淅沥的下午,PoPoQQQ爷在屠了一道题后放松心情,恰看见我把知识点上的群论标记已会. 于是,为了发扬D人的精神,PoPoQQQ爷打开了 ...

  2. BZOJ1488: [HNOI2009]图的同构

    BZOJ1488: [HNOI2009]图的同构 Description 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是 ...

  3. BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (群论、Burnside引理、组合计数)

    题目链接 (Luogu) https://www.luogu.org/problem/P4727 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.ph ...

  4. BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (Burnside引理、组合计数)

    题目链接 (Luogu) https://www.luogu.org/problem/P4727 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.ph ...

  5. 链表+启发式合并(bzoj 1483: [HNOI2009]梦幻布丁)

    1483: [HNOI2009]梦幻布丁 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 3323  Solved: 1304 [Submit][Sta ...

  6. [乱搞] BZOJ 1484 [HNOI2009]通往城堡之路

    什么仙人掌DP啊,我好怕怕啊 题解:http://blog.csdn.net/zeyu_king/article/details/44924517 #include <cstdio> #i ...

  7. Luogu P4708 画画 (Burnside引理、组合计数)

    题目链接 https://www.luogu.org/problem/P4708 题解 看上去Luogu P4706-4709是Sdchr神仙出的一场比赛,一道水题和三道很有趣的题终于全过了纪念QAQ ...

  8. Luogu P4708 画画 (Burnside引理、组合计数、划分数)

    题目链接 https://www.luogu.org/problem/P4708 题解 看上去Luogu P4706-4709是Sdchr神仙出的一场比赛,一道水题和三道很有趣的题终于全过了纪念QAQ ...

  9. 《小学生都能看懂的群论从入门到升天教程》 《群论全家桶》

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 小学生都能看懂系列,小学生:我太难了   群论.置换.Bunrnside引理.Pόlya定理等概念是群 ...

  10. bzoj千题计划227:bzoj1486: [HNOI2009]最小圈

    http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...

最新文章

  1. 对DBF的操作建议用微软的驱动和新的链接字符串。
  2. SQL数据库对象的删除
  3. url携带的参数获取并处理demo
  4. 移动端隐藏滚动条(最全面)
  5. python 生成器装饰器_4.python迭代器生成器装饰器
  6. 程序员如何和产品经理优雅的干架
  7. Atitit db model 数据库快速建模法 开发效率 目录 1. 结构(数据)设计 行为(处理)设计: 1 2. 业务建模阶段 1 2.1. Ui建模法,根据表单字段建立表字段 2 2.2.
  8. python正则表达式思考_Python正则表达式由浅入深(一)
  9. robocode_Robocode策略
  10. 倍福TwinCAT软件安装及注意事项
  11. linux刷wes7,WES7——Win7的嵌入式操作系统
  12. LOAP引擎:clickhouse06:简单介绍几个JSON函数
  13. 斯坦福全球AI报告:中国AI论文发表数首超欧洲,全球AI投资700亿
  14. c/c++源码学习和实践资源,万丈高楼平地起
  15. R语言-查看加载包、卸除加载包及安装包与卸载包
  16. web服务器的开发(简易版本)
  17. Babylongjs-高度图,天空盒,图片精灵及K帧动画
  18. WifiNetworkSelector 走读
  19. java web二手书店,基于jsp的二手书交易-JavaEE实现二手书交易 - java项目源码
  20. 小米手机抓取hci log

热门文章

  1. 主板电源开关接口图解_主板跳线接法示意图,超详细适合DIY新手
  2. mysql索引卡死_SQL2000数据库运行缓慢、卡、死锁!请重建索引!
  3. uniapp 移动端上传文件_移动端上传头像并裁剪 - Clipic.js
  4. 图论 有向无环图 拓扑排序 是什么
  5. 去除移动端alert/confirm的网址(url)
  6. SpringBoot学习(二)SpringBoot自动装配原理
  7. Jquery学习 -千锋学习
  8. Linux tty远程退出,screen 如果程序没结束就退出远程管理终端
  9. date java format_java-DateFormat
  10. Mac 系统下 配置多个ssh-key (git sourcetree)