题意:

给出n(n<=53)点的无向完全图 要将每条边染上m(m<=1000)种颜色的一种

只改变顶点编号的图视为同种方案 求本质不同方案数%p(p>n且为质树)的值

题解:

这题貌似是很裸的polya 但是发现置换有n!个 根本枚举不出来 于是我们采用算每个点置换对应的边轮换相加得到答案 注意:这里的点置换并不是指原图中的点 而是某条边的两个顶点
假设现在知道一个点置换P=(1)^c1(2)^c2(3)^c3... P对应的边轮换有两种
1.边的两个顶点在同一个点轮换里 设点轮换长度为L 这个点轮换对应的边轮换有L/2个 这种总的有∑(i/2*ci)个
2.边的两个顶点在不同的点轮换里 设点轮换长度为L1、L2 这两个点轮换对应的边轮换有***(L1,L2)个
证明:置换长度为L1*L2 轮换长度为lcm(L1,L2) 边轮换=L1*L2/lcm(L1,L2)=***(L1,L2)
这种总数有 分为两种情况:
(1)L1=L2 有∑(***(i,i)*C(ci,2))=∑(i*ci*(ci-1)/2)个
(2)L1≠L2 有∑(***(i,j)*ci*cj)个
所以一个点置换对应的边轮换个数有 ∑(i/2*ci)+∑(i*ci*(ci-1)/2)+∑(***(i,j)*ci*cj)个
点置换的求法:知道∑(i*ci)=n 用dfs枚举ci即可 知道指定的{ci} 边置换个数是相同的 只要再*共轭类就行了
知道边置换只要套一下polya就完了 因为它的p是给出的 且大于n 所以***(p,n!)=1 所以n!的乘法逆元为n!^(p-2)
这题也有点会卡常数 但是没spoj那么凶残 ci的值需要开个栈记下了 不然可能会TLE 另外 这题虽然开long long没关系 但是有些连乘的地方要%多次 不然long long也会爆

代码:

 #include <cstdio>
typedef long long ll;
ll n,m,p,ans,add[][],jc[],top;
ll gcd(ll a,ll b){
ll t;
while (b) t=a,a=b,b=t%b;
return a;
}
ll mi(ll a,ll b){
ll res=;
for (;b;b>>=){
if (b&) res=res*a%p;
a=a*a%p;
}
return res;
}
ll gon2(){
ll save=;
for (ll i=;i<=top;i++)
save=(save*jc[add[i][]]%p*mi(add[i][],add[i][]))%p;
return jc[n]*mi(save,p-)%p;
}
void work(){
ll tot=;
for (ll i=;i<=top;i++){
tot+=(add[i][]/)*add[i][];
if (add[i][]>) tot+=add[i][]*add[i][]*(add[i][]-)/;
for (ll j=i+;j<=top;j++) tot+=gcd(add[i][],add[j][])*add[i][]*add[j][];
}
ans=(ans+mi(m,tot)*gon2())%p;
}
void dfs(ll t,ll r){
if (t>r){
if (!r) work();
return;
}
for (ll i=;i*t<=r;i++){
if (i) add[++top][]=i,add[top][]=t;
dfs(t+,r-i*t);
if (i) --top;
}
}
void extgcd(ll a,ll b,ll &x,ll &y){
if (!b) x=,y=;
else{
extgcd(b,a%b,x,y);
ll t=x;
x=y;
y=t-a/b*y;
}
}
void makejc(){
jc[]=;
for (ll i=;i<=;i++) jc[i]=jc[i-]*i%p;
}
int main(){
freopen("sgu282.in","r",stdin);
freopen("sgu282.out","w",stdout);
scanf("%I64d %I64d %I64d\n",&n,&m,&p);
makejc();
dfs(,n);
printf("%I64d",ans*mi(jc[n],p-)%p);
fclose(stdin);
fclose(stdout);
}

【sgu282】Isomorphism的更多相关文章

  1. 【BZOJ4474】isomorphism(树的同构,哈希)

    题意:一个无向树的度数为 2的结点称为假结点,其它结点称为真结点.一个无向树的简化树其结点由原树的全体真结点组成,两个真结点之间有边当且仅当它们在原树中有边,或者在原树中有一条联结这两个结点的路,其中 ...

  2. 【BZOJ1478】Sgu282 Isomorphism Pólya定理神题

    [BZOJ1478]Sgu282 Isomorphism 题意:用$m$种颜色去染一张$n$个点的完全图,如果一个图可以通过节点重新标号变成另外一个图,则称这两个图是相同的.问不同的染色方案数.答案对 ...

  3. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  4. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  5. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  8. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  9. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

随机推荐

  1. (转)最新版的SSH框整合(Spring 3.1.1 + Struts 2.3.1.2 + Hibernate 4.1)

    最近一直有朋友在问,最新版的Spring.Struts.Hibernate整合老是有问题,昨晚大概看了一下.从Hibernate 4 开始,本身已经很好的实现了数据库事务模块,而Spring也把Hib ...

  2. 高性能Web框架Zend Framework

    Zend Framework (ZF)是用 PHP 5.3及更高版本来开发 Web 程序和服务的开源框架.ZF用100% 面向对象编码实现. ZF的组件结构独一无二,每个组件几乎不依靠其他组件.这样的 ...

  3. ios进度条Demo一个

    一个很简单的Dmo.就拿出来分享一下. 一个简单的阴影效果 _progressView.frame = CGRectMake(size.width * progress-size.width, H_H ...

  4. ORACLE将表中的数据恢复到某一个时间点

    执行如下SQL将test_temp表中的数据恢复到 2013-04-26  21:06:00 注意,这里一定要先删除全部数据,否则可能会导致数据重复 delete from test_temp; in ...

  5. .NET 内存管理—CLR的工作

    看了http://www.cnblogs.com/liulun/p/3145351.html  不错,补习下相关技术.. 正文: .NET依托CLR进行的内存的管理 有了CLR 基本不需要担心.net ...

  6. hdu 4911 Inversion (分治 归并排序 求逆序数)

    题目链接 题意:给n个数,求交换k次相邻的数之后的最小的逆序数对. 用分治的方法,以前在poj上做过这种题,昨天比赛的时候忘了.... 下面的归并排序还是以前的模板. #include <ios ...

  7. BZOJ3856: Monster

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3856 题解:怎么乱搞一下都可以把 代码: #include<cstdio> #in ...

  8. Share SDK 第三方登录

    import java.util.HashMap; import org.apache.http.Header; import android.app.Activity; import android ...

  9. error while loading shared libraries: libevent-2.0.so.5解决办法

    安装memcache时,需要建立文件索引或者说文件连接(link),类似windows下的快捷方式 启动服务时出现 error while loading shared libraries: libe ...

  10. 在Windows下编译ffmpeg完全手册

    本文的内容几乎全部来自于FFmpeg on Windows,但是由于国内的网络封锁,很难访问这个域名下的内容,因此我一方面按照我自己的理解和实践做了翻译,另一方面也是为了能提供一个方便的参考方法. 注 ...