bzoj 1488: [HNOI2009]图的同构
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]图的同构相关推荐
- BZOJ 1488 [HNOI2009]图的同构 Polya定理
题意:链接 方法: Polya定理 解析: 先扯点题外话. 小雨淅沥的下午,PoPoQQQ爷在屠了一道题后放松心情,恰看见我把知识点上的群论标记已会. 于是,为了发扬D人的精神,PoPoQQQ爷打开了 ...
- BZOJ1488: [HNOI2009]图的同构
BZOJ1488: [HNOI2009]图的同构 Description 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是 ...
- BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (群论、Burnside引理、组合计数)
题目链接 (Luogu) https://www.luogu.org/problem/P4727 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.ph ...
- BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (Burnside引理、组合计数)
题目链接 (Luogu) https://www.luogu.org/problem/P4727 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.ph ...
- 链表+启发式合并(bzoj 1483: [HNOI2009]梦幻布丁)
1483: [HNOI2009]梦幻布丁 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 3323 Solved: 1304 [Submit][Sta ...
- [乱搞] BZOJ 1484 [HNOI2009]通往城堡之路
什么仙人掌DP啊,我好怕怕啊 题解:http://blog.csdn.net/zeyu_king/article/details/44924517 #include <cstdio> #i ...
- Luogu P4708 画画 (Burnside引理、组合计数)
题目链接 https://www.luogu.org/problem/P4708 题解 看上去Luogu P4706-4709是Sdchr神仙出的一场比赛,一道水题和三道很有趣的题终于全过了纪念QAQ ...
- Luogu P4708 画画 (Burnside引理、组合计数、划分数)
题目链接 https://www.luogu.org/problem/P4708 题解 看上去Luogu P4706-4709是Sdchr神仙出的一场比赛,一道水题和三道很有趣的题终于全过了纪念QAQ ...
- 《小学生都能看懂的群论从入门到升天教程》 《群论全家桶》
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 小学生都能看懂系列,小学生:我太难了 群论.置换.Bunrnside引理.Pόlya定理等概念是群 ...
- bzoj千题计划227:bzoj1486: [HNOI2009]最小圈
http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...
最新文章
- 对DBF的操作建议用微软的驱动和新的链接字符串。
- SQL数据库对象的删除
- url携带的参数获取并处理demo
- 移动端隐藏滚动条(最全面)
- python 生成器装饰器_4.python迭代器生成器装饰器
- 程序员如何和产品经理优雅的干架
- Atitit db model 数据库快速建模法 开发效率 目录 1. 结构(数据)设计 行为(处理)设计:	1 2. 业务建模阶段	1 2.1. Ui建模法,根据表单字段建立表字段	2 2.2.
- python正则表达式思考_Python正则表达式由浅入深(一)
- robocode_Robocode策略
- 倍福TwinCAT软件安装及注意事项
- linux刷wes7,WES7——Win7的嵌入式操作系统
- LOAP引擎:clickhouse06:简单介绍几个JSON函数
- 斯坦福全球AI报告:中国AI论文发表数首超欧洲,全球AI投资700亿
- c/c++源码学习和实践资源,万丈高楼平地起
- R语言-查看加载包、卸除加载包及安装包与卸载包
- web服务器的开发(简易版本)
- Babylongjs-高度图,天空盒,图片精灵及K帧动画
- WifiNetworkSelector 走读
- java web二手书店,基于jsp的二手书交易-JavaEE实现二手书交易 - java项目源码
- 小米手机抓取hci log
热门文章
- 主板电源开关接口图解_主板跳线接法示意图,超详细适合DIY新手
- mysql索引卡死_SQL2000数据库运行缓慢、卡、死锁!请重建索引!
- uniapp 移动端上传文件_移动端上传头像并裁剪 - Clipic.js
- 图论 有向无环图 拓扑排序 是什么
- 去除移动端alert/confirm的网址(url)
- SpringBoot学习(二)SpringBoot自动装配原理
- Jquery学习 -千锋学习
- Linux tty远程退出,screen 如果程序没结束就退出远程管理终端
- date java format_java-DateFormat
- Mac 系统下 配置多个ssh-key (git sourcetree)