[bzoj1004][HNOI2008]Cards

标签: 置换 Burnside引理


题目链接

扯淡

题目中说了这样一句话

两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方法可以使用多次)

怎么样?是不是很棘手。然而

输入数据保证任意多次洗牌都可用这 m种洗牌法中的一种代替,且对每种洗牌法,都存在一种洗牌法使得能回到原状态。

题意

n张牌,3种颜色,给你一个置换集合G(且保证对于任意\(f,g\in G,fg \in G\)),让你对每张牌染色,使得红色Sred种,蓝色Sblue种,绿色Sgreen种。求不同的染色方案总数。

题解

根据burnside引理:等价类的个数等于每一个置换的不动点的个数之和的平均数。
如果是一个不动点的话,那么这个置换每一个循环中的元素颜色都一样。
这样我们就能跑一个三维背包了。

Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<set>
#include<queue>
#include<map>
#include<stack>
#include<vector>
using namespace std;
#define ll long long
#define REP(i,a,b) for(int i=(a),_end_=(b);i<=_end_;i++)
#define DREP(i,a,b) for(int i=(a),_end_=(b);i>=_end_;i--)
#define EREP(i,a) for(int i=start[(a)];i;i=e[i].next)
inline int read()
{int sum=0,p=1;char ch=getchar();while(!(('0'<=ch && ch<='9') || ch=='-'))ch=getchar();if(ch=='-')p=-1,ch=getchar();while('0'<=ch && ch<='9')sum=sum*10+ch-48,ch=getchar();return sum*p;
}const int maxn=100;int mod;int dp[maxn][maxn][maxn],sr,sb,sg,n,m,ans;int fa[maxn*3],w[maxn*3],cnt;int fin(int x)
{return x==fa[x]?x:fa[x]=fin(fa[x]);
}int power(int a,int b)
{int ans=1;while(b){if(b & 1)ans=ans*a%mod;b>>=1;a=a*a%mod;}return ans;
}void init()
{sr=read();sb=read();sg=read();n=sr+sb+sg;m=read();mod=read();REP(i,1,m+1){REP(j,1,n)fa[j]=j;if(i<m+1){REP(j,1,n){int v=read();int x=fin(j),y=fin(v);if(x!=y){fa[y]=x;}}}memset(w,0,sizeof(w));cnt=0;REP(col,1,n){int flag=1;REP(j,1,n){if(fin(j)==col){if(flag)flag=0,cnt++;w[cnt]++;}}}memset(dp,0,sizeof(dp));dp[0][0][0]=1;REP(j,1,cnt){DREP(x,sr,0){DREP(y,sb,0){DREP(z,sg,0){if(x>=w[j])dp[x][y][z]+=dp[x-w[j]][y][z];if(y>=w[j])dp[x][y][z]+=dp[x][y-w[j]][z];if(z>=w[j])dp[x][y][z]+=dp[x][y][z-w[j]];dp[x][y][z]%=mod;}}}}ans=(ans+dp[sr][sb][sg])%mod;}cout<<ans*power(m+1,mod-2)%mod<<endl;
}int main()
{freopen("input.in","r",stdin);freopen("output.out","w",stdout);init();return 0;
}

转载于:https://www.cnblogs.com/gzy-cjoier/p/7472722.html

[bzoj1004][HNOI2008]Cards相关推荐

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

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

  2. [HNOI2008]Cards

    1004: [HNOI2008]Cards Time Limit: 10 Sec  Memory Limit: 162 MB [Submit][Status][Discuss] Description ...

  3. P1446 [HNOI2008]Cards

    P1446 [HNOI2008]Cards 题意: 有n张牌,染三种颜色,每种颜色规定数目,给出m种不同的洗牌方法.两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方 ...

  4. 置换群burnside引理(bzoj 1004: [HNOI2008]Cards)

    置换群: 看半天置换群表示并看不懂QAQ 但顾名思义是置换组成的群 其实不用看懂也行,就拿简单的例子来说吧 有一个序列s = {1, 2, 3, 4, 5, 6} 和一个变换规则t = {2, 3, ...

  5. [HNOI2008] Cards

    Description 给出 \(n\) 张牌,要求染出 \(a\) 种红色,\(b\) 种蓝色,\(c\) 种zyz之色绿色.同时给出 \(m\) 种洗牌方法,两种染色方案相同当且仅当可以通过洗牌从 ...

  6. bzoj 1004: [HNOI2008]Cards

    /**************************************************************Problem: 1004User: lxy8584099Language ...

  7. 【BZOJ】1004: [HNOI2008]Cards(置换群+polya+burnside)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1004 学习了下polya计数和burnside引理,最好的资料就是:<Pólya 计数法的应用 ...

  8. BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]

    传送门 题意:三种颜色,规定使用每种颜色次数$r,g,b$,给出一个置换群,求多少种不等价着色 $m \le 60,\ r,g,b \le 20$ 咦,规定次数? <组合数学>上不是有生成 ...

  9. 信奥中的数学:母函数

    [HDU1085][HDU1028][HDU2013] 组合数学入门(母函数.递推) [HDU1085][HDU1028][HDU2013] 组合数学入门(母函数.递推)_Dango's happy ...

最新文章

  1. 匹兹堡大学申请条件计算机科学,匹兹堡大学cs
  2. boost::hana::permutations用法的测试程序
  3. html5 audio音频播放全解析
  4. SAP CDS view权限控制实现原理介绍
  5. 我在芝加哥大学经济学系的博士生涯
  6. 为什么人们常说“十个创业九个死”?
  7. 中国姜黄根提取物行业市场供需与战略研究报告
  8. 清除浮动(HTML、CSS)
  9. android地图偏移谷歌中国地图偏移校正补丁,关于谷歌地图GPS偏移问题的解决办法...
  10. c语言中函数的知识点总结,c语言函数知识点总结
  11. cmd命令查询电脑序列号_硬盘序列号查询软件_如何查看电脑硬盘序列号
  12. Python学习17(GUI图形用户界面编程)
  13. 双目摄像头相关参数介绍
  14. c语言删除元素1116,C语言网-1116题-IP判断
  15. Google earth engine(GEE):基于MODIS的LST(地表温度数据)计算一定时间序列的城市热岛强度(UHI),并绘制直方图
  16. VitalTools 唯她CAD工具集
  17. Python之任意阶幻方的构造
  18. java 数据库排序_Java如何排序数据库表的数据内容?
  19. python 字典循环赋值,Python字典循环添加一键多值的用法实例
  20. LOG,Harris,SUSAN角点及边缘检测原理和代码实现

热门文章

  1. 百度地图jsAPI使用总结(四)散点地图之mapv
  2. 创建onenet连接nb-iot产品设备
  3. db2数据库建表的时候主键怎么建_DB2数据库建表报错
  4. 关于cpu的几个概念
  5. 【DB宝44】Oracle rac集群中的IP类型简介
  6. 1. 营销人员服务意识与服务技巧
  7. 收银系统服务器有哪些,收银系统有哪些,国产收银系统十大排名
  8. Google Protocol Buffer(GPB)使用之完全解析三:如何使用GPB?
  9. Unity 接口回调
  10. 三种常用的UI库的安装使用:iview,element与vant