[BZOJ1815&BZOJ1488]有色图/图的同构(Polya定理)
由于有很多本质相同的重复置换,我们先枚举各种长度的点循环分别有多少个,这个暴搜的复杂度不大,n=53时也只有3e5左右。对于每种搜索方案可以轻易求出它所代表的置换具体有多少个。
但我们搜索的是点置换组成的循环,要求的是边置换组成的循环。现在问题就是对于每种搜索方案,求出有多少个边循环。
首先,如果一条边的两个端点属于同一点循环,另一条边的端点属于两个不同点循环,那么显然这两条边不可能属于同一边循环。
对于一个长度为L的点循环,观察发现所有两个端点都属于这个点循环的边构成了L/2个边循环。
对于两个长度分别为L1,L2的点循环,由于每条端点分别在这两个点循环中的边都是等价的,所有所有循环长度相等。显然每个循环长度为lcm(L1,L2),所以边共组成gcd(L1,L2)个边循环。
由Polya定理直接得解。
同理[BZOJ1488]可以看作一个完全图的黑白染色,直接令m=2即可。
#include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
typedef long long ll;
using namespace std; const int N=;
int n,m,mod,ans,tot,sm,fac[N],inv[N],Inv[N],L[N]; int gcd(int a,int b){ return b ? gcd(b,a%b) : a; } int ksm(int a,int b){
int res=;
for (; b; a=1ll*a*a%mod,b>>=)
if (b & ) res=1ll*res*a%mod;
return res;
} void dfs(int x,int lst){
if (x>n){
int s=,cnt=fac[n],same=;
rep(i,,tot){
s+=L[i]/;
rep(j,i+,tot) s+=gcd(L[i],L[j]);
cnt=1ll*cnt*Inv[L[i]]%mod;
if (i> && L[i]==L[i-]) same++;
else cnt=1ll*cnt*inv[same]%mod,same=;
}
cnt=1ll*cnt*inv[same]%mod;
sm=(sm+cnt)%mod; ans=(ans+1ll*cnt*ksm(m,s))%mod;
return;
}
rep(i,lst,n-x+) L[++tot]=i,dfs(x+i,i),tot--;
} int main(){
freopen("bzoj1815.in","r",stdin);
freopen("bzoj1815.out","w",stdout);
scanf("%d%d%d",&n,&m,&mod);
fac[]=inv[]=Inv[]=;
rep(i,,n) Inv[i]=1ll*(mod-mod/i)*Inv[mod%i]%mod;
rep(i,,n) fac[i]=1ll*fac[i-]*i%mod;
inv[n]=ksm(fac[n],mod-);
for (int i=n-; i; i--) inv[i]=1ll*inv[i+]*(i+)%mod;
dfs(,); printf("%lld\n",1ll*ans*ksm(sm,mod-)%mod);
return ;
}
[BZOJ1815&BZOJ1488]有色图/图的同构(Polya定理)的更多相关文章
- [bzoj1488][HNOI2009]图的同构——Polya定理
题目大意 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是指a图的顶点经过一定的重新标号以后,a图的顶点集和边集能完全与b ...
- BZOJ1815 SHOI2006有色图(Polya定理)
置换数量是阶乘级别的,但容易发现本质不同的点的置换数量仅仅是n的整数拆分个数,OEIS(或者写个dp或者暴力)一下会发现不是很大,当n=53时约在3e5左右. 于是暴力枚举点的置换,并且发现根据点的置 ...
- BZOJ 1815: [Shoi2006]color 有色图(Polya定理)
题意 如果一张无向完全图(完全图就是任意两个不同的顶点之间有且仅有一条边相连)的每条边都被染成了一种颜色,我们就称这种图为有色图. 如果两张有色图有相同数量的顶点,而且经过某种顶点编号的重排,能够使得 ...
- 【BZOJ1488】[HNOI2009]图的同构(Burside引理,Polya定理)
[BZOJ1488][HNOI2009]图的同构(Burside引理,Polya定理) 题面 BZOJ 洛谷 题解 求本质不同的方案数,很明显就是群论这套理论了. 置换一共有\(n!\)个,考虑如何对 ...
- bzoj1488 [HNOI2009]图的同构 Burnside 引理
题目传送门 bzoj1488 - [HNOI2009]图的同构 bzoj1815 - [Shoi2006]color 有色图(双倍经验) 题解 暴力 由于在做题之前已经被告知是 Burnside 引理 ...
- bzoj1488[HNOI2009]图的同构
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1488 1488: [HNOI2009]图的同构 Time Limit: 10 Sec M ...
- Polya 定理 学习笔记
群 群的定义 我们定义,对于一个集合 \(G\) 以及二元运算 \(\times\),如果满足以下四种性质,那我们就称 \((G,\times)\) 为一个群. 1. 封闭性 对于 \(a\in G, ...
- 【转】Polya定理
转自:http://endlesscount.blog.163.com/blog/static/82119787201221324524202/ Polya定理 首先记Sn为有前n个正整数组成的集合, ...
- 【群论】polya定理
对Polya定理的个人认识 我们先来看一道经典题目: He's Circles(SGU 294) 有一个长度为N的环,上面写着“X”和“E”,问本质不同的环有多少个(不 ...
随机推荐
- IIS8.0 配置应用程序初始化功能
IIS进程回收后,第一次访问会超级慢,这对于用户是不能接受的,怎么解决这个问题? 我们不能设置IIS不回收进程,因为这样可能会导致IIS内存泄漏.有效的方法时,尽量在业务空闲时间回收进程,回收后立刻预 ...
- 防止 Google Smart Lock 记忆错的用户名
默认 chrome 会查找密码上面的那个(非隐藏非禁用)的表单域 如果上面是个短信验证码框,就会将验证码当成用户名提示用户保存. 在用户名 input 上添加 autocomplete="u ...
- mysql中使用日期加减时无法识别年-月格式数据的问题,%Y-%m"这种格式数据
最新做报表统计的时候处理按月统计部分时发现,虽然使用 DATE_FORMAT( time, '%Y-%m' ) 函数可以将日期格式转成年-月,但是如果是参数是年-月格式,即"2018-10& ...
- Next Permutation & Previous Permutation
Next Permutation Given a list of integers, which denote a permutation. Find the next permutation in ...
- Wood Cut
Given n pieces of wood with length L[i] (integer array). Cut them into small pieces to guarantee you ...
- docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)
=============================================== 2018/7/8_第1次修改 ccb_warlock === ...
- Focal Loss for Dense Object Detection 论文阅读
何凯明大佬 ICCV 2017 best student paper 作者提出focal loss的出发点也是希望one-stage detector可以达到two-stage detector的准确 ...
- [转]python与numpy基础
来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb ...
- git —— 多人协作(远程库操作)
1.查看远程库信息 $ git remote 2.查看详细远程库信息 $ git remote -v 3.推送分支 $ git push origin 分支名 4.抓取分支 $ git checkou ...
- JMeter接口&性能测试
JMeter接口测试 目前最新版本发展到5.0版本,需要Java7以上版本环境,下载解压目录后,进入\apache-jmeter-5.0\bin\,双击ApacheJMeter.jar文件启动JMem ...