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

题目链接

BZOJ1004

题解

burnside定理
\(m\)个置换下本质不同的染色方案数,等于每种置换下不变的方案数的平均数

\(L\)为本质不同的染色方案数,\(m\)为置换数,\(f(i)\)为置换\(i\)下不变的方案数,那么
\[L = \frac{1}{m}\sum\limits_{i = 1}^{m} f(i)\]

在一个置换下一个方案不变,当且仅当该置换的任意一个循环节内部颜色相同
记循环节个数为\(c_i\),色数为\(k\)且不限使用,那么该置换下不变的方案数为
\[k^{c_i}\]
很好理解,每个循环节都能染\(k\)种颜色

于是乎我们就得到了\(polya\)引理:
在每种颜色数量不限情况下
\[L = \frac{1}{m}\sum\limits_{i = 1}^{m} k^{c_i}\]

回到本题

本题多了一个每种颜色数量的限制
我们只需计算出\(f(i)\),即每种置换下不变的方案数
\(c_i\)个循环节,每个循环节会消耗掉同一种颜色\(len_i\)
将每个循环节看做一个有\(len_i\)体积的物品,就可以用一个三维\(01\)背包计算出方案数

题目中实际暗藏一个置换,就是什么置换也不用,实际上就相当于一个循环节数量为\(n\)的置换【置换群的单位元】
如果题中没给出这样的置换,需要我们手动加一个
这个置换的方案数可以直接确定,就是排列数\(\frac{n!}{Sr!Sb!Sg!}\)

这样我们就做完这题了
时间复杂度\(O(m*n*Sr*Sb*Sg)\)

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 65,maxm = 25,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
int f[maxm][maxm][maxm],to[maxn],vis[maxn],v[maxn],fac[maxn];
int P,Sa,Sb,Sc,n,m,ans,flag;
void add(int& a,int b){a += b;if (a >= P) a -= P;
}
int qpow(int a,int b){int re = 1;for (; b; b >>= 1,a = 1ll * a * a % P)if (b & 1) re = 1ll * re * a % P;return re % P;
}
int main(){Sa = read(); Sb = read(); Sc = read(); m = read(); P = read();n = Sa + Sb + Sc; fac[0] = 1 % P;for (int i = 1; i < maxn; i++) fac[i] = 1ll * fac[i - 1] * i % P;for (int T = 1; T <= m ;T++){cls(vis); int tot = 0;for (int i = 1; i <= n; i++) to[i] = read();for (int i = 1; i <= n; i++){if (!vis[i]){int cnt = 1,u = i; vis[u] = true;while (!vis[to[u]]) u = to[u],vis[u] = true,cnt++;v[++tot] = cnt;}}if (tot == n) flag = true;cls(f); f[0][0][0] = 1;for (int i = 1; i <= tot; i++){for (int a = Sa; a >= 0; a--){for (int b = Sb; b >= 0; b--){for (int c = Sc; c >= 0; c--){if (a >= v[i]) add(f[a][b][c],f[a - v[i]][b][c]);if (b >= v[i]) add(f[a][b][c],f[a][b - v[i]][c]);if (c >= v[i]) add(f[a][b][c],f[a][b][c - v[i]]);}}}}add(ans,f[Sa][Sb][Sc]);}if (!flag){add(ans,1ll * fac[n] * qpow(fac[Sa],P - 2) % P * qpow(fac[Sb],P - 2) % P * qpow(fac[Sc],P - 2) % P);m++;}printf("%lld\n",1ll * ans * qpow(m,P - 2) % P);return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/9026408.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数接口– Java 8中java.util.function包中的函数接口

我以前写过有关功能接口及其用法的文章。 如果您正在探索要成为Java 8一部分的API&#xff0c;尤其是那些支持lambda表达式的API&#xff0c;您会发现很少的接口&#xff0c;例如Function&#xff0c;Supplier&#xff0c;Consumer&#xff0c;Predicate和其他接口&#xff0c;…

Gcc静态编译出错

编译命令&#xff1a;gcc -static -o test test.c 出错信息&#xff1a;/usr/bin/ld: cannot find -lccollect2: error: ld returned 1 exit status 原因&解决方法&#xff1a;静态链接需要静态库&#xff0c;系统没有安装静态库导致报错。yum install glibc-static.x86_64…

css之浮动

首先说下什么是浮动&#xff08;float&#xff09;&#xff1a;浮动的框可以向左向右移动&#xff0c;直到他的外边缘碰到包含框或者另一个浮动框为止。 浮动在css样式里面是很重要的&#xff0c;我们一起来看看浮动的特点&#xff1a; 1.脱离标准文档流&#xff08;简称脱标&…

linux 修改jmeter内存溢出,jmeter本机内存溢出如何修改?

websocket连接过程中内存溢出&#xff0c;本机配置的内存最大和最小设置的512&#xff1b;一、后台返回二、结果树返回&#xff1a;Thread Name: 线程组 1-9Sample Start: 2017-09-11 13:59:49 CSTLoad time: 9006Connect Time: 0Latency: 0Size in bytes: 0Sent bytes:0Header…

Monkey写脚本

今天学习使用monkey测试一个应用的登陆&#xff0c;遇到些问题记录下&#xff1a; 先上代码&#xff1a; typeraw events count 1 speed 1.0 start data >>LauncheActivity(com.android.smartmirror,com.android.smartmirror.activities.MainActivity)UserWait(500) //…

JSF:在传统组件和时尚性能杀手之间进行选择

这篇博客文章起源于一个大型Web应用程序中的性能问题。 每个人都优化Java代码&#xff0c;但似乎没有人尝试优化JavaScript代码。 奇怪&#xff0c;因为在客户端有很多改进的空间。 我会说&#xff0c;甚至比服务器端还要多。 我们将分析可编辑的JSF标准组件&#xff08;有时称…

JS之 if语句函数 对接事件动作 函数更改css css对接需要换妆的区id或class

if 函数的实现步骤: function 名字() 指定id , 指定开关(display: none or block) if else 构成逻辑 控制开关 决定在哪里安置一个灯泡, 指定一个id给某个标签 把开关用电线连着灯泡, 安装开关 # id名称{ 属性1 赋值, 属性 2 赋值 , 属性3 赋值 } 所有的赋值都可以成为一…

BZOJ - 4520 K远点对

题意:已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对 维护大小为2k最小堆,KD树的估值用前面提到的做法 PS.网上有人估价是使用边界四个点的最值来独立枚举,然而这样写似乎过不了 #include<bits/stdc.h> #define rep(i,j,k) for(register int ij;i<k;i) #define r…

小型Hadoop集群的Ganglia配置和一些故障排除

Ganglia是一个针对大型集群的开源&#xff0c;可扩展且分布式的监视系统。 它收集&#xff0c;汇总并提供数十种与计算机相关的指标&#xff08;例如CPU&#xff0c;内存&#xff0c;存储&#xff0c;网络使用情况&#xff09;的时序视图。 您可以在UC Berkeley Grid上看到Gang…

linux 命令分号,linux命令之间的分号,, ||

声明、定义 in C&plus;&plus;序 声明和定义是我们使用的基础,但是对于声明和定义的概念,我们不甚了了,也就是说感觉好像是这样,但是真要详细说明就说不上来. 有博主对于声明和定义有以下描述: 1.需要建立存储空间的 ...Java基础之创建窗口——使用流布局管理器…

margin赋值为负值的几种效果(负值像素,负值百分数)

1、margin-top为负值像素 margin-top为负值像素&#xff0c;偏移值相对于自身&#xff0c;其后元素受影响&#xff0c;见如下代码&#xff1a; 1 <!DOCTYPE html>2 <html lang"zh">3 <head>4 <meta charset"UTF-8" />5 &…

代码大全:类

第二部分 创建高质量的代码 第6章 可以工作的类 在计算时代的早期&#xff0c;程序员基于语句来思考编程问题。到了二十世纪七八十年代&#xff0c;程序员开始基于子程序去思考编程。进入二十一世纪&#xff0c;程序员以类为基础思考编程问题。【思考编程的角度有很多&#xff…

Java 8中java.util.function包中的谓词和使用者接口

在我以前的文章中&#xff0c;我写了关于Function接口的内容 &#xff0c;它是java.util.package的一部分。 我还提到了Predicate接口&#xff0c;它是同一包的一部分&#xff0c;在这篇文章中&#xff0c;我将向您展示如何使用Predicate和Consumer接口。 让我们看一下Javadoc …

css之盒子模型

什么是盒子模型&#xff1f; 网页中的任何一个标签都相当于是一个盒子模型&#xff0c;而所有的盒子模型都存在五个必要的属性&#xff1a;width,height,padding,border,margin. 那么在一个网页中如何计算一个盒子模型实际所占的宽度呢&#xff1f;&#xff1f;&#xff1f;&a…

linux伙伴系统算法,Linux伙伴系统(三)--分配

介绍过伙伴系统的原理和伙伴系统的数据结构&#xff0c;现在来看伙伴系统是如何来分配页面的。实际上&#xff0c;伙伴系统分配页面的算法并不复杂&#xff0c;但是由于考虑到分配内存时要尽量减少碎片的产生(涉及迁移机制)以及当内存不足时需要采取各种更为积极的手段&#xf…

Drools Planner重命名为OptaPlanner:宣布www.optaplanner.org

我们很自豪地宣布&#xff0c;从版本6.0.0.Beta1开始&#xff0c;将Drools Planner重命名为OptaPlanner。 我们也很高兴推出其新网站&#xff1a; www.optaplanner.org。 OptaPlanner优化了业务资源的使用。 每个组织都面临计划问题&#xff1a;以有限的有限资源&#xff08;员…

File如何转换成MultipartFile

MutipartFile是spring里面定义的接口&#xff0c;它封装了用户在上传图片时所包含的所有信息&#xff0c;但是有些时候我们要将file转换成MutipartFile&#xff0c;才能在保持原有代码逻辑的情况下方便代码的调整&#xff0c;但是file不能直接转换成MutipartFile&#xff0c;现…

Vue 进阶教程之:详解 v-model

分享 Vue 官网教程上关于 v-model 的讲解不是十分的详细&#xff0c;写这篇文章的目的就是详细的剖析一下&#xff0c; 并介绍 Vue 2.2 v-model改进的地方&#xff0c;然后穿插的再说点 Vue 的小知识。在 Vue 中&#xff0c;有许多方法和 Angular 相似&#xff0c;这主要是因…

linux 无密码登录另一台服务器,ECS Linux服务器ssh免密码登录另外一台服务器的具体设置...

若有多台linux服务器&#xff0c;为方便起见&#xff0c;服务器之前可设置免密码ssh登录&#xff0c;具体操作参考如下所示&#xff1a;1 、登录其中一个服务器&#xff0c;执行ssh-keygen -t rsa&#xff0c;按3次回车&#xff0c;将会生成公钥和私钥文件id_rsa和id_rsa.pub&a…

CSS3 animation-timing-function steps()

animation-timging-function 主要是控制css动画从开始到结束的速度。 linear&#xff1a;线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0) ease&#xff1a;平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0) ease-in&#xff1a;由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1…