【BZOJ】1003 Cards
【解析】Burnside引理+背包dp+乘法逆元
[Analysis]
这道题卡了好久,就是没想懂置换跟着色是不一样的。
依据burnside引理。在一个置换群作用下不等价类的个数为每一个置换作用下不动点个数的平均数。
在这道题中:
置换的对象 ——
每一个状态,标号为1—N(这里的N不是题目的N,而是状态的个数)。
不动点 ——
前后染色状态全然同样的状态的个数。
所以就是求经过变换后前后状态全然同样的个数。
[Sum]
Burnside引理几个注意的地方
[1]什么是Burnside引理?
[2]置换的对象是什么?
[3]不动点意味着什么?
[4]着色变换不是置换。
[Code]
<span style="font-size:18px;">/**************************************************************
Problem: 1004
User: y20070316
Language: C++
Result: Accepted
Time:328 ms
Memory:2164 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std; const int N=70; int Sr,Sb,Sg,n,m,p; //Basic
int map[N][N],d[N],v[N],cnt; //Substitution
int f[N][N][N]; //Damatic Programming
int res; //Answer inline int read(void)
{
int s=0,f=1; char c=getchar();
for (;c<'0'||c>'9';c=getchar());
for (;'0'<=c&&c<='9';c=getchar()) s=s*10+c-'0';
return s*f;
} void init(void)
{
Sr=read(),Sb=read(),Sg=read(),n=Sr+Sb+Sg;
m=read(),p=read();
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++) map[i][j]=read();
m++; for (int j=1;j<=n;j++) map[m][j]=j;
} void work(void)
{
for (int i=1;i<=m;i++)
{
cnt=0; memset(v,0,sizeof v);
memset(d,0,sizeof d); for (int j=1;j<=n;j++)
if (!v[j])
{
v[j]=d[++cnt]=1;
for (int k=map[i][j];k^j;k=map[i][k])
v[k]=1,d[cnt]++;
} memset(f,0,sizeof f); f[0][0][0]=1;
for (int i=1;i<=cnt;i++)
for (int j=Sr;j>=0;j--)
for (int k=Sb;k>=0;k--)
for (int q=Sg;q>=0;q--)
{
f[j][k][q]=0;
if (j>=d[i]) f[j][k][q]=(f[j][k][q]+f[j-d[i]][k][q])%p;
if (k>=d[i]) f[j][k][q]=(f[j][k][q]+f[j][k-d[i]][q])%p;
if (q>=d[i]) f[j][k][q]=(f[j][k][q]+f[j][k][q-d[i]])%p;
}
res=(res+f[Sr][Sb][Sg])%p;
}
} int mi(int i,int j)
{
if (!j) return 1;
int s=mi(i,j>>1);
s=s*s%p;
if (j&1) s=s*i%p;
return s;
} void print(void)
{
int inv=mi(m,p-2);
res=res*inv%p;
printf("%d\n",(res+p)%p);
} int main(void)
{
init();
work();
print(); return 0;
}</span>
【BZOJ】1003 Cards的更多相关文章
- 【BZOJ】1003: [ZJOI2006]物流运输trans(SPFA+DP)
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1003 这题一开始看是不会的额,,,还是看题解了..一开始我觉得不能用最短路啥的,,看了题解发现这是d ...
 - 【BZOJ】3052: [wc2013]糖果公园
		
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
 - 【BZOJ】3319: 黑白树
		
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
 - 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
		
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
 - 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
		
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
 - 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)
		
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
 - 【BZOJ1004】[HNOI2008]Cards Burnside引理
		
[BZOJ1004][HNOI2008]Cards 题意:把$n$张牌染成$a,b,c$,3种颜色.其中颜色为$a,b,c$的牌的数量分别为$sa,sb,sc$.并且给出$m$个置换,保证这$m$个置 ...
 - 【BZOJ】【3083】遥远的国度
		
树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...
 - 【BZOJ】【2434】【NOI2011】阿狸的打字机
		
AC自动机+DFS序+BIT 好题啊……orz PoPoQQQ 大爷 一道相似的题目:[BZOJ][3172][TJOI2013]单词 那道题也是在fail树上数有多少个点,只不过这题是在x的fail ...
 
随机推荐
- mysql 更新数据
			
set @num= 1000;update table set a= @num:=@num+1; set @date=now();UPDATE Orders t SET t.CreateTime = ...
 - JS-JavaScript String 对象-string对象方法3:concat()
			
1.concat():用于连接两个或多个字符串. 1).语法:string.concat(string1, string2, ..., stringX) (string1, string2, . ...
 - 牛客网 牛客小白月赛1 E.圆与三角形-公式题
			
E.圆与三角形 链接:https://www.nowcoder.com/acm/contest/85/E来源:牛客网 这个题把公式推一下, 发现就是1+sinA*r,sinA最大为1,所以 ...
 - (1)jquery基本用法
			
引入jquery 本地引用 <script src="jquery-3.2.1.js"></script> 网络引用 谷歌CDN <script sr ...
 - Codeforces  911F Tree Destruction(贪心 && 树的直径)
			
题目链接 Tree Destructi 题意 给定一棵树,每次可以选定树上的两个叶子,并删去其中的一个.答案每次加上两个选定的叶子之间的距离. 求最后答案的最大值. 首先求出树的某一条直径,令其端 ...
 - CentOS 6.9编译安装Python-2.7.14(python升级)
			
参考 Python官网:https://www.python.org/ 阿里云 https://www.aliyun.com/jiaocheng/517192.html 一.查看CentOS版本和系统 ...
 - Careercup | Chapter 1
			
1.1 Implement an algorithm to determine if a string has all unique characters. What if you cannot us ...
 - VisualStudio 2013 Prieview体验
			
今天看到VisualStudio 2013的预览版发布了,便立即下载试用了一下. 主体界面和VS2012非常类似,不过色彩要稍微丰富点. 现在支持用MS账户登录了,登陆后可以同步设置,这个小功能还是比 ...
 - java程序容错
			
程序最怕出错的方式就是直接闪退 编程应该以这种方式进行,保证结构不出错,数据可容错的方式 比如 fungetsonmfrominternet(){变量 a a=从网络返回数据 return a } 在 ...
 - redis--服务器与客户端
			
初始化服务器 从启动 Redis 服务器,到服务器可以接受外来客户端的网络连接这段时间,Redis 需要执行一系列初始化操作. 整个初始化过程可以分为以下六个步骤: 初始化服务器全局状态. 载入配置文 ...