传送门


在没做这道题之前天真的我以为\(Polya\)可以完全替代\(Burnside\)

考虑\(Burnside\)引理,它要求的是对于置换群中的每一种置换的不动点的数量。

既然是不动点,那么对于这一个置换中的一个轮换,这个不动点中轮换里所有位置的颜色都必须相同。

然后题目就转化成了一个背包。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cctype>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<stack>
#include<vector>
#include<cmath>
//This code is written by Itst
using namespace std; inline int read(){
int a = 0;
char c = getchar();
while(!isdigit(c))
c = getchar();
while(isdigit(c)){
a = a * 10 + c - 48;
c = getchar();
}
return a;
} int dp[21][21][21] , cg[61];
int sr , sb , sg , N , M , P , sum;
bool vis[61]; inline int poww(int a , int b){
int times = 1;
while(b){
if(b & 1)
times = times * a % P;
a = a * a % P;
b >>= 1;
}
return times;
} inline int calcLen(int x){
int cnt = 0;
while(!vis[x]){
vis[x] = 1;
x = cg[x];
++cnt;
}
return cnt;
} inline void add(int& a , int b){
a = a + b >= P ? a + b - P : a + b;
} void calc(){
memset(vis , 0 , sizeof(vis));
memset(dp , 0 , sizeof(dp));
dp[0][0][0] = 1;
for(int i = 1 ; i <= N ; ++i)
if(!vis[i]){
int t = calcLen(i);
for(int j = sr ; j >= 0 ; --j)
for(int k = sb ; k >= 0 ; --k)
for(int l = sg ; l >= 0 ; --l){
if(j >= t)
add(dp[j][k][l] , dp[j - t][k][l]);
if(k >= t)
add(dp[j][k][l] , dp[j][k - t][l]);
if(l >= t)
add(dp[j][k][l] , dp[j][k][l - t]);
}
}
add(sum , dp[sr][sb][sg]);
} signed main(){
#ifndef ONLINE_JUDGE
//freopen("in" , "r" , stdin);
//freopen("out" , "w" , stdout);
#endif
sr = read();
sb = read();
sg = read();
N = sr + sb + sg;
M = read();
P = read();
for(int i = 1 ; i <= N ; ++i)
cg[i] = i;
calc();
for(int i = 1 ; i <= M ; ++i){
for(int j = 1 ; j <= N ; ++j)
cg[j] = read();
calc();
}
cout << sum * poww(M + 1 , P - 2) % P;
return 0;
}

BZOJ1004 HNOI2008 Cards Burnside、背包的更多相关文章

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

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

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

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

  3. BZOJ1004: [HNOI2008]Cards(Burnside引理 背包dp)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4255  Solved: 2582[Submit][Status][Discuss] Descript ...

  4. bzoj1004 [HNOI2008]Cards Burnside 引理+背包

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1004 题解 直接 Burnside 引理就可以了. 要计算不动点的个数,那么对于一个长度为 \ ...

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

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

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

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

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

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

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

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

  9. 【bzoj1004】[HNOI2008]Cards Burnside引理+背包dp

    题目描述 用三种颜色染一个长度为 $n=Sr+Sb+Sg$ 序列,要求三种颜色分别有 $Sr,Sb,Sg$ 个.给出 $m$ 个置换,保证这 $m$ 个置换和置换 ${1,2,3,...,n\choo ...

随机推荐

  1. 「Android」adb调试源码(针对dumpsys SurfceFlinger、trace.txt获取)

    首先对ADB作简单的阐述,接下来对adb shell dumpsys SurfaceFlinger服务的dump信息的查看.以及ANR问题如何获取trace文件并简单分析. -×*********** ...

  2. NoHttp封装--06 NoHttp之队列、队列优先级

    public class Main { /** * 程序入口 */ public void start() { // 第一种,先进先出的队列 // YolandaLinkedQueue queue = ...

  3. element-ui的table动态生成表头和数据,且表中数据可编辑

    1.实现表头的动态渲染 2.表头label和prop字段都要定义 3.去判断显示那个数据表 4.实现双击的时候在可编辑 // 双击修改 弹出input tableDbEdit(row, column, ...

  4. Linux 无线网卡配置

    无线网卡常见的配置选项 某TL-WR842N路由器无线配置选项含义: 无线名称 路由器的无线(Wi-Fi)名称.无线密码 无线加密使用WPA2-PSK/WPA-PSK加密方式.AES加密算法,无线密码 ...

  5. Android 5.0 版本 USB 调试模式打开方法

    Android 4.2 版本 USB 调试模式打开方法 1. 进入“设置”页面,点击“关于平板电脑”.见下图红色方框.   2. 疯狂点击“版本号”,见下图红色方框,直到出现“您现在处于开发者模式!” ...

  6. realloc 用方法

    realloc 用方法 void* realloc(void*, n) 根据n的大小,如果n比较小,就沿用原来的内存地址(也就是返回的地址就是原来的地址),在原来地址的内存空间的最后面,加上n大小的内 ...

  7. SAP事物代码

    事物代码是SAP进入特定功能的快捷命令,如事物代码VA01能快速进入创建销售订单的页面,要浏览当前页面的事物代码,在状态栏右下角可以查看 快速导航事物代码 这类事物代码将功能相似的事物代码组合在一起, ...

  8. 【Linux基础】alias命令指定别名

    1.alias命令 alias是一个系统自建的shell命令,允许你为名字比较长的或者经常使用的命令指定别名. alias //显示当前定义的所有别名 alias ll='ls -l' //定义别名l ...

  9. Servlet工作原理解析(tomcat7、嵌入式服务器)

      目录 Servlet 容器Tomcat Servlet 容器的启动过程 Web 应用的初始化工作 Servlet 体系结构 创建 Servlet 对象(如何被加载) 初始化 Servlet(如何被 ...

  10. linux学习笔记整理(五)

    第六章 Centos7用户管理本节所讲内容:6.1 用户和组的相关配置文件6.2 管理用户和组6.3实战:进入centos7 紧急模式恢复root密码 用户一般来说是指使用计算机的人,计算机对针使用其 ...