BZOJ 1488: [HNOI2009]图的同构 polay
题意:两个图AB同构:把A的顶点重新编号后与B一模一样。求n个顶点的图一共有多少个?(同构的算一种)
思路:边有n*(n-1)/2,这些边可以有可以没有,所以等同于边的颜色有两种。然后将n划分成循环节的和,n=L1+L2+……+Lm。现在需要把点置换映射到边置换。两个边在一个点循环节(大小L)时边置换循环节为L/2,否则为Gcd(L1,L2)。然后就是计算(L1,L2,……,Lm)这种划分的个数,设m个循环有t种数字,每种数字个数p1,p2,……,pt,那么划分个数为:n!/(L1*L2……*Lm*p1!*……*pt!)。
const int mod=997; int p[N];
int n;
int f[N][2],cnt; void init()
{
p[0]=1;
int i;
for(i=1;i<N;i++) p[i]=p[i-1]*i%mod;
} int ans; void cal()
{
i64 x=0,i,j;
FOR0(i,cnt)
{
x+=f[i][0]/2*f[i][1]+(f[i][1]-1)*f[i][1]/2*f[i][0];
for(j=i+1;j<cnt;j++) x+=f[i][1]*f[j][1]*Gcd(f[i][0],f[j][0]);
}
i64 pp=1;
FOR0(i,cnt) pp=pp*myPow(f[i][0],f[i][1],mod)%mod*p[f[i][1]]%mod;
pp=p[n]*gcdReverse(pp,mod)%mod; ans+=myPow(2,x,mod)*pp%mod;
ans%=mod;
} void DFS(int t,int re)
{
if(re==0)
{
cal();
return;
}
if(t>re) return;
DFS(t+1,re);
int i;
for(i=1;i*t<=re;i++)
{
f[cnt][0]=t;
f[cnt++][1]=i;
DFS(t+1,re-i*t);
cnt--;
}
} int main()
{
init();
RD(n);
DFS(1,n);
ans=ans*gcdReverse(p[n],mod)%mod;
PR(ans);
}
BZOJ 1488: [HNOI2009]图的同构 polay的更多相关文章
- BZOJ 1488: [HNOI2009]图的同构 [Polya]
完全图中选出不同构的简单图有多少个 上题简化版,只有两种颜色....直接copy就行了 太诡异了,刚才电脑上多了一个不动的鼠标指针,然后打开显卡管理界面就没了 #include<iostream ...
- bzoj 1488: [HNOI2009]图的同构
Description 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是指a图的顶点经过一定的重新标号以后,a图的顶点集和 ...
- bzoj 1488: [HNOI2009]图的同构【polya定理+dfs】
把连边和不连边看成黑白染色,然后就变成了 https://www.cnblogs.com/lokiii/p/10055629.html 这篇讲得好!https://blog.csdn.net/wzq_ ...
- bzoj1488[HNOI2009]图的同构
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1488 1488: [HNOI2009]图的同构 Time Limit: 10 Sec M ...
- 【BZOJ1488】[HNOI2009]图的同构(Burside引理,Polya定理)
[BZOJ1488][HNOI2009]图的同构(Burside引理,Polya定理) 题面 BZOJ 洛谷 题解 求本质不同的方案数,很明显就是群论这套理论了. 置换一共有\(n!\)个,考虑如何对 ...
- [BZOJ 1483] [HNOI2009] 梦幻布丁 (线段树合并)
[BZOJ 1483] [HNOI2009] 梦幻布丁 (线段树合并) 题面 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1 ...
- bzoj1488 [HNOI2009]图的同构 Burnside 引理
题目传送门 bzoj1488 - [HNOI2009]图的同构 bzoj1815 - [Shoi2006]color 有色图(双倍经验) 题解 暴力 由于在做题之前已经被告知是 Burnside 引理 ...
- 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 MBSubmit: 1818 Solved: 761[Submit][Status ...
随机推荐
- Java高效编程之一【创建和销毁对象】
一.考虑用静态工厂方法替代构造函数 代表实现:java.util.Collection Framework Boolean类的简单例子: public static Boolean valueOf ( ...
- PHP商品秒杀倒计时
<?php //php的时间是以秒算.js的时间以毫秒算 date_default_timezone_set('PRC'); //date_default_timezone_set(" ...
- java连接数据库URL
转: 1.Oracle数据库 Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url ...
- hibernate笔记01
- 利用VHD虚拟文件加密自己的个人信息
1.制作VHD磁盘 计算机—管理—磁盘管理—操作—创建VHD 2.挂载卸载VHD磁盘 磁盘管理—操作—附加VHD 选择只读则不允许修改文件内容 3.用途 这样一个虚拟磁盘就被建立出来.它实际上仅仅是一 ...
- Spring的javaMail邮件发送(带附件)
项目中经常用到邮件功能,在这里简单的做一下笔记,方便日后温习. 首先需要在配置文件jdbc.properties添加: #------------ Mail ------------ mail.smt ...
- Java使用基本字节流OutputStream的四种方式对于数据复制(文本,音视频,图像等数据)
//package 字符缓冲流bufferreaderDemo; import java.io.BufferedOutputStream; import java.io.FileInputStream ...
- JS和CSS的多浏览器兼容(2)
2.Css的浏览器兼容性 方法一,根据不同的浏览器加载不同的css file <!DOCTYPE html> <html> <head> <title> ...
- webApi FileReader
https://developer.mozilla.org/en-US/docs/Web/API/FileReader https://github.com/node-file-api/FileRea ...
- oracle sqlloader 用法
向oracle中导入*.csv文件 1.什么是*.csv,如何得到? 里面存放的是数据表.每行代表数据库表格的一行, 每行中,每两个数据中间由逗号","分割. *.csv可以通 ...