群论第一题。

发现这题也是有颜色个数限制的,所以不能用$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. Angular v6 正式发布

    Angular 6 正式发布 Angular 6 已经正式发布了!这个主要版本并不关注于底层的框架,更多地关注于工具链,以及使 Angular 在未来更容易快速推进. 作为发布的一部分,我们同步了主要 ...

  2. R实战 第七篇:绘图文本表

    文本表是显示数据的重要图形,一个文本表按照区域划分为:列标题,行标题,数据区,美学特征有:前景样式.背景央视.字体.网格线等. 一,使用ggtexttable绘图文本表 载入ggpubr包,可以使用g ...

  3. 我对Spring的理解。

    1.Spring实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类ApplicationCon ...

  4. Tomcat的缺省是多少,怎么修改

     Tomcat的缺省端口号是8080. 修改Tomcat端口号: 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 ...

  5. string to int

    problem describe: given a string , first find the first word which is not white space;then there wil ...

  6. flash builder 4.6与myecilpse 10.7集成

    一.在flash builder 4.0以后就没有单独提供插件版的flash builder了,因此必须先安装完整版的flash builder,再进行插件集成. 二.集成过程比较简单但也有几个要注意 ...

  7. JS window对象的top、parent、opener含义介绍(转载)

    1.top该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. 2.openeropener用于在window.open的页面引用执行该window ...

  8. java.util.logging的使用

    秉承着某种执念我今天决定不用Logback而是和Java的logging肛到底,现在总结一下研究成果: 日志等级 日志等级有七种,severe,warning,info,fine,finer,fine ...

  9. 1、学习笔记之——html

    这篇学习笔记是在看一些教学视频学习时所记,可能比较乱,就当是自己以后复习的资料好了. <!doctype html> <html> <head> <meta ...

  10. Java工具类 通过ResultSet对象返回对应的实体List集合

    自从学了JDBC用多了像一下这种代码: List<xxx> list = new Array<xxx>(); if(rs.next()){ xxx x = new xxx(); ...