题意:

求n个点,无重边无自环,本质不同的无向图的个数;

本质不同指将两个图任意重新标号之后两个图不相同;

n<=60;

题解:

首先这是一道置换计数的题目;

我们应用polya定理解决这道题;

考虑每条边选或不选,这就是两种颜色;

那么就是求每种置换方式的边循环个数;

置换方式就是对于点的重标号,这是有n!种的啊;

然而这n!中有一些情况的答案是一样的,因为其实答案只和点循环中点的个数有关;

比如(1)(2,3)和(1,2)(3)就是一样的,都是1,2这样的划分方法;

那么对于一种划分方法来说,边循环个数怎么求呢?

一种划分中有两种边,划分在一起的边和不在一起的边;

在一起的边有floor(块大小/2)种边循环,不在一起的有gcd(块1大小,块2大小)种;

统计起来做2的幂次,然后在乘这种划分的个数;

至于划分的个数是多少。。我召唤一下wzq

现在对于我们枚举出来的一个点循环集l1,l2...lm来说,有多少个这个点循环集呢?

有N!|l1|∗|l2|∗...∗|lm|

但是注意到,我们枚举出来的点循环集可能有大小相等的。

所以我们还得除掉大小相等的点循环集的个数的排列。

至于如上为什么是这样,您要是不知道的话,那请听一听排列组合吧。

于是对应的这个点循环搞出来的如此的边循环集个数是多少呢N!|l1|∗|l2|∗...∗|lm|∗|S1!|∗|S2!|∗...∗|Sq!|

这个粘的不太好别在意= = ;

然后就结束了,数的划分之后对每个划分统计一下,最后在除n的全排列即可;
预处理一下逆元和阶乘,int就可以了;
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 64
#define mod 997
using namespace std;
int n,ans;
int a[N],fact[N],inv[mod];
int pow(int x,int y)
{int ret=1;while(y){if(y&1)ret=ret*x%mod;x=x*x%mod;y>>=1;}return ret;
}
int gcd(int a,int b)
{int t=a%b;while(t){a=b,b=t;t=a%b;}return b;
}
void calc(int tot)
{int ret=0,last=0,cnt=0;for(int i=1;i<=tot;i++){ret+=a[i]>>1;for(int j=1;j<i;j++){ret+=gcd(a[i],a[j]);}}ret=pow(2,ret);ret=ret*fact[n]%mod;for(int i=1;i<=tot;i++){ret=ret*inv[a[i]]%mod;if(a[i]!=last){ret=ret*inv[fact[cnt]]%mod;last=a[i];cnt=0;}cnt++;}ret=ret*inv[fact[cnt]]%mod;ans=(ans+ret)%mod;
}
void dfs(int d,int last,int now)
{if(n==now){calc(d-1);return ;}for(int i=last;i<=n-now;i++){a[d]=i;dfs(d+1,i,now+i);}
}
void init()
{fact[0]=1;for(int i=1;i<N;i++)fact[i]=fact[i-1]*i%mod;for(int i=1;i<mod;i++)inv[i]=pow(i,mod-2);
}
int main()
{init();scanf("%d",&n);dfs(1,1,0);ans=ans*inv[fact[n]]%mod;printf("%d",ans);return 0;
}

bzoj-1488 图的同构相关推荐

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

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

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

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

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

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

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

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

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

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

  6. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  7. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  8. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

  9. BZOJ 2957楼房重建

    传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...

  10. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

最新文章

  1. IOS-多线程(NSOperation)
  2. 让运维人崩溃的10大瞬间
  3. 初识github之注册和基本概念
  4. shell 获取 mysql 行数_一个Shell小脚本精准统计Mysql每张表的行数实现
  5. 为什么redis取出来是null_[2020] Redis 最新面试题
  6. lisp医院化验系统_浅谈医院化验室信息系统(LIS)的建设
  7. 微课|中学生可以这样学Python(例4.2):打印九九乘法表
  8. 在Windows 7 (SP1)上安装Visual Studio 2015
  9. java输入验证码代码,JavaWeb 实现验证码功能(demo)
  10. oracle 开启事务_javaSE第十四部分 JDBC(2)mysql事务和JDBC实现事务
  11. nginx websocket 代理
  12. npm:no such file /usr/local/lib/node_modules/vue-cli/node_modules/get-stream
  13. http://www.feedsky.com/help_publishwidget.html
  14. 安装完固态硬盘后计算机里没显示,安装了双硬盘电脑却不显示新硬盘怎么办
  15. php百度网盘登录,php登陆状态百度网盘获取文件下载链接【思路|部分代码】
  16. CodeFun-UI 设计稿智能生成前端源代码
  17. 进行小红书营销,怎样拉入更多的客户?
  18. 数组中a与a[0]的区别
  19. 浙江工商大学20机试(oj复试)月利率
  20. php搭建markdown云笔记_Typora+坚果云:支持markdown的云笔记搭建

热门文章

  1. 三、亚马逊产品定价其实就这么简单,一个公式解决
  2. Photoshop教程五:图层混合模式
  3. Python机器学习日记(十三)
  4. 洛谷P5706 【深基2.例8】再分肥宅水__C++描述
  5. 减少计算机硬盘,电脑磁盘分区会降低性能?
  6. jpg怎么合成一份_如何将多张图片合成一个文件
  7. SetLocale和GetLocale函数
  8. [中英字幕]吴恩达机器学习系列课程 笔记
  9. Cocos Creator如何制作3D微信小游戏教程
  10. 微信小程序体验版(测试环境)和线上版(生产环境)发布