群论第一题。

发现这题也是有颜色个数限制的,所以不能用$Polya$,只能用$Burnside$

$L={\frac{1}{|G|}}{\sum_{i=1}^{m}{D(a_{i})}}$

先$dfs$出每个循环节长度,每个循环节颜色需要一样,$dp$就好了。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define N 105
using namespace std;
int n,m,mod,na,nb,nc,nn,ans;
int num[N],sum[N],f[N][N][N],fa[N],fac[N];
bool vis[N];
void dfs(int x,int now){
vis[x]=;num[now]++;
if(!vis[fa[x]])dfs(fa[x],now);
}
int qp(int a,int b){
int c=;
while(b){
if(b&)c=c*a%mod;
a=a*a%mod;b>>=;
}
return c;
}
int C(int a,int b){
if(b<||b>a)return ;
if(!b||a==b)return ;
return fac[a]*qp(fac[b],mod-)%mod*qp(fac[a-b],mod-)%mod;
}
int main(){
scanf("%d%d%d%d%d",&na,&nb,&nc,&m,&mod);
n=na+nb+nc;
fac[]=;
for(int i=;i<=;i++)fac[i]=fac[i-]*i%mod;
for(int t=;t<=m;t++){
for(int i=;i<=n;i++)
scanf("%d",&fa[i]);
memset(vis,,sizeof vis);
memset(num,,sizeof num);
memset(f,,sizeof f);
nn=;
for(int i=;i<=n;i++)
if(!vis[i]){
dfs(i,++nn);
sum[nn]=sum[nn-]+num[nn];
}
f[][][]=;
for(int i=;i<=nn;i++){
for(int j=;j<=na;j++){
if(j>sum[i-])break;
for(int k=;k<=nb;k++){
if(j+k>sum[i-])break;
int l=sum[i-]-j-k;
if(l>nc)break;
if(j+num[i]<=na)f[i][j+num[i]][k]+=f[i-][j][k];
if(k+num[i]<=nb)f[i][j][k+num[i]]+=f[i-][j][k];
if(l+num[i]<=nc)f[i][j][k]+=f[i-][j][k];
}
}
}
ans+=f[nn][na][nb];
}
(ans+=C(n,na)*C(n-na,nb))%=mod;
(ans*=qp(m+,mod-))%=mod;
printf("%d\n",ans);
return ;
}

bzoj [HNOI2008]Cards的更多相关文章

  1. bzoj 1004 1004: [HNOI2008]Cards burnside定理

    1004: [HNOI2008]Cards Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1668  Solved: 978[Submit][Stat ...

  2. BZOJ 1004: [HNOI2008]Cards( 置换群 + burnside引理 + 背包dp + 乘法逆元 )

    题意保证了是一个置换群. 根据burnside引理, 答案为Σc(f) / (M+1). c(f)表示置换f的不动点数, 而题目限制了颜色的数量, 所以还得满足题目, 用背包dp来计算.dp(x,i, ...

  3. 【BZOJ 1004】 1004: [HNOI2008]Cards (置换、burnside引理)

    1004: [HNOI2008]Cards Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很 ...

  4. bzoj 1004 Cards

    1004: [HNOI2008]Cards Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有 多少种染色方案,Sun ...

  5. 【bzoj1004】[HNOI2008]Cards

    1004: [HNOI2008]Cards Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2928  Solved: 1754[Submit][Sta ...

  6. 【BZOJ1004】[HNOI2008]Cards Burnside引理

    [BZOJ1004][HNOI2008]Cards 题意:把$n$张牌染成$a,b,c$,3种颜色.其中颜色为$a,b,c$的牌的数量分别为$sa,sb,sc$.并且给出$m$个置换,保证这$m$个置 ...

  7. 洛谷 P1446 [HNOI2008]Cards 解题报告

    P1446 [HNOI2008]Cards 题目描述 小春现在很清闲,面对书桌上的\(N\)张牌,他决定给每张染色,目前小春只有\(3\)种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun ...

  8. luogu P1446 [HNOI2008]Cards

    题目链接 luogu P1446 [HNOI2008]Cards 题解 题意就是求染色方案->等价类 洗牌方式构成成了一个置换群 然而,染色数限制不能用polay定理直接求解 考虑burnsid ...

  9. bzoj1004 [HNOI2008]Cards 置换群+背包

    [bzoj1004][HNOI2008]Cards 2014年5月26日5,3502 Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿 ...

随机推荐

  1. Java IO学习--(三)通道

    Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力.所以管道也可以作为数据源以及目标媒介. 你不能利用管道与不同的JVM中的线程通信(不同的进程).在概念上,Java的管道不同于U ...

  2. Python Selenium之异常处理

    自动化测试执行过程中,难免会有错误/异常出现,比如测试脚本没有发现对应元素,则会立刻抛出NoSuchElementException异常.这时不要怕,肯定是测试脚本或者测试环境哪里出错了!那如何处理才 ...

  3. 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。

    基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别. 我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Tras ...

  4. Linux中使用export命令设置环境变量

    Linux export 命令 2011-08-31 22:36:39|  分类: 命令总结|举报|字号 订阅     功能说明:设置或显示环境变量. ######################## ...

  5. JMS详细的工作原理

    如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了.为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随 ...

  6. get请求URL的转码

    String name = new String(json.getString("name").getBytes("iso8859-1"),"UTF- ...

  7. R语言学习 第十一篇:日期和时间

    R语言的基础包中提供了三种基本类型用于处理日期和时间,Date用于处理日期,它不包括时间和时区信息:POSIXct/POSIXlt用于处理日期和时间,其中包括了日期.时间和时区信息.R内部在存储日期和 ...

  8. 微信小程序UI组件、开发框架、实用库...

    UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...

  9. JavaScript高级程序设计(二)

    一.函数 1.1 JS中函数无重载,同一作用域下定义两个函数,而不会引发错误,但真正调用的是后面定义的函数.例如: function doAdd(iNum){ alert(iNum+100); } f ...

  10. java 字符串池【转】

    java 字符串池 java运行环境有一个字符串池.比如String str="abc"时,会首先查看字符串池中是否存在字符串"abc",如果存在则直接将&qu ...