三维01背包算出在每一个置换下不变的染色方案数,Burnside引理计算答案。

PS:数据太水所以只算恒等置换也是可以过的。

#include<bits/stdc++.h>
using namespace std;
int n,m,p,x,y,z;
bool u[61];
int f[21][21][21],s[61],v[61];
int power(int u,int v){
int d=1;
for(;v;v>>=1){
if(v&1)
d=d*u%p;
u=u*u%p;
}
return d;
}
void add(int& u,int v){
u=(u+v)%p;
}
int main(){
scanf("%d%d%d%d%d",&x,&y,&z,&m,&p);
n=x+y+z;
int ans=1;
for(int i=1;i<=n;++i)
ans=ans*i%p;
for(int i=1;i<=x;++i)
ans=ans*power(i,p-2)%p;
for(int i=1;i<=y;++i)
ans=ans*power(i,p-2)%p;
for(int i=1;i<=z;++i)
ans=ans*power(i,p-2)%p;
for(int t=0;t!=m;++t){
for(int i=1;i<=n;++i)
scanf("%d",s+i);
memset(u,0,sizeof u);
int cnt=0;
for(int i=1;i<=n;++i)
if(!u[i]){
int k=u[i]=1;
for(int j=s[i];j!=i;j=s[j])
k+=u[j]=1;
v[cnt++]=k;
}
memset(f,0,sizeof f);
f[0][0][0]=1;
for(int a=0;a!=cnt;++a)
for(int i=x;~i;--i)
for(int j=y;~j;--j)
for(int k=z;~k;--k){
if(i>=v[a])
add(f[i][j][k],f[i-v[a]][j][k]);
if(j>=v[a])
add(f[i][j][k],f[i][j-v[a]][k]);
if(k>=v[a])
add(f[i][j][k],f[i][j][k-v[a]]);
}
add(ans,f[x][y][z]);
}
printf("%d\n",ans*power(m+1,p-2)%p);
}

BZOJ1004: [HNOI2008]Cards的更多相关文章

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

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

  2. [BZOJ1004] [HNOI2008]Cards解题报告(Burnside引理)

    Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红 ...

  3. BZOJ1004 [HNOI2008]Cards 【burnside定理 + 01背包】

    题目链接 BZOJ1004 题解 burnside定理 在\(m\)个置换下本质不同的染色方案数,等于每种置换下不变的方案数的平均数 记\(L\)为本质不同的染色方案数,\(m\)为置换数,\(f(i ...

  4. BZOJ1004 [HNOI2008]Cards(Polya计数)

    枚举每个置换,求在每个置换下着色不变的方法数,先求出每个循环的大小,再动态规划求得使用给定的颜色时对应的方法数. dp[i][j][k]表示处理到当前圈时R,B,G使用量为i,j,k时的方法数,背包思 ...

  5. [BZOJ1004] [HNOI2008] Cards (Polya定理)

    Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红 ...

  6. BZOJ1004 HNOI2008 Cards Burnside、背包

    传送门 在没做这道题之前天真的我以为\(Polya\)可以完全替代\(Burnside\) 考虑\(Burnside\)引理,它要求的是对于置换群中的每一种置换的不动点的数量. 既然是不动点,那么对于 ...

  7. BZOJ1004[HNOI2008]Cards——polya定理+背包

    题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色 ...

  8. bzoj1004: [HNOI2008]Cards(burnside引理+DP)

    题目大意:3种颜色,每种染si个,有m个置换,求所有本质不同的染色方案数. 置换群的burnside引理,还有个Pólya过几天再看看... burnside引理:有m个置换k种颜色,所有本质不同的染 ...

  9. bzoj1004 [HNOI2008]Cards Burnside定理+背包

    题目传送门 思路:首先是Burnside引理,要先学会这个博客. Burnside引理我们总结一下,就是 每种置换下不动点的数量之和除以置换的总数,得到染色方案的数量.        这道题,显然每种 ...

随机推荐

  1. Hibernate用注解实现实体类和表的映射

    数据库mysql: 1.一对一 person50表password50表是一对一的关系: password50表中有外键 person_id person实体类: package com.c50.en ...

  2. “Ceph浅析”系列之七——关于Ceph的若干想法

    本篇文章的内容,主要是笔者在调研分析Ceph过程中产生的一些思考.因为其中的内容比较自由发散,且大多是笔者的个人见解,故此另启一文进行讨论. 关于Ceph的性能 目前为止,本系列的文章中没有涉及到Ce ...

  3. 【BZOJ 3242】【UOJ #126】【CodeVS 3047】【NOI 2013】快餐店

    http://www.lydsy.com/JudgeOnline/problem.php?id=3242 http://uoj.ac/problem/126 http://codevs.cn/prob ...

  4. 运维mysql基础

    1 mysql简介 一般写某个东西先介绍一下,我就老生常谈的简单介绍下(摘自维基百科) https://zh.wikipedia.org/wiki/MySQL MySQL(官方发音为英语发音:/maɪ ...

  5. Fiddler内置命令

    我猜你肯定忽略了下边这个小黑框: 虽然它不是很显眼,但用好它,会让你的工作效率提高 N 倍! 这跟喜欢 Linux 的朋友一样,肯定更倾向于用一两个命令代替鼠标不断的点点点操作. Fiddler 将每 ...

  6. 51nod 1441 欧拉筛法

    1441 士兵的数字游戏 题目来源: CodeForces 基准时间限制:6 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 两个士兵正在玩一个游戏,游戏开始的时候, ...

  7. java.lang.Exception: No runnable methods

    java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validateInstanc ...

  8. 【CodeForces 266C】Below the Diagonal(模拟)

    题目每次把空列换到最后一列,把非空行换到最下一行. #include<cstdio> #include<algorithm> #define N 1005 using name ...

  9. java,js,jstl,EL的简单交互

    EL全名Expression Language.EL提供了在JSP脚本编制元素范围外使用运行时表达式的功能. 脚本编制元素是指页面中能够用于在JSP文件中嵌入java代码的元素. JSP标准标记库(j ...

  10. Leetcode 134 Gas Station

    There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...