【题目分析】

同样是Burnside引理。但是有几种颜色是不能放在一起的。

所以DP就好了。

然后T掉

所以矩阵乘法就好了。

然后T掉

所以取模取的少一些,矩阵乘法里的取模尤其要注意,就可以了。

A掉

【代码】

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define maxn 11
#define ll long long
#define inf 0x3f3f3f3f
#define maxm 100005
const int md=9973; int T,n,m,k,ni,ispr[maxm],pr[maxm],top=0,sum; struct Matrix{
int x[maxn][maxn];
void init(){memset(x,0,sizeof x);}
void clear(){F(i,1,m)F(j,1,m)x[i][j]=1;}
void print()
{
F(i,1,m)
{
F(j,1,m) printf("%d ",x[i][j]);
printf("\n");
}
}
}A,B,C,D; Matrix operator * (const Matrix a,const Matrix b) {
Matrix c;
for (int i=1;i<maxn;++i)
for (int j=1;j<maxn;++j)
{
c.x[i][j]=0;
for (int k=1;k<maxn;++k)
c.x[i][j]+=a.x[i][k]*b.x[k][j];
c.x[i][j]%=md;
}
return c;
} void init()
{
F(i,2,maxm-1)
{
if (!ispr[i]) pr[++top]=i;
F(j,2,inf)
{
if (i*j>=maxm) break;
ispr[i*j]=1;
}
}
} int qpow(int a,int b)
{
int ret=1;a%=md;
while (b)
{
if (b&1) (ret*=a)%=md;
(a*=a)%=md;
b>>=1;
}
return ret;
} int phi(int n)
{
int ret=n;
for (int i=1;pr[i]*pr[i]<=n&&i<=top;++i)
if (n%pr[i]==0)
{
ret=ret-ret/pr[i];
while (n%pr[i]==0) n/=pr[i];
}
if (n>1) ret=ret-ret/n;
return ret%md;
} int tak(int b)
{
int ret=0;
D.init();F(i,1,m)D.x[i][i]=1;
C=B;
while (b)
{
if (b&1) D=D*C;
C=C*C;
b>>=1;
}
F(i,1,m) ret+=D.x[i][i];
return ret;
} int main()
{
init();
scanf("%d",&T);
while (T--)
{
sum=0;
scanf("%d%d%d",&n,&m,&k);
ni=qpow(n,md-2);
B.init();
B.clear();
F(i,1,k)
{
int a,b;
scanf("%d%d",&a,&b);
B.x[a][b]=B.x[b][a]=0;
}
for (int i=1;(ll)i*(ll)i<=(ll)n;++i)
{
if (n%i==0)
{
sum=(sum+tak(i)*phi(n/i))%md;
if (i*i!=n)
sum=(sum+tak(n/i)*phi(i))%md;
}
}
printf("%d\n",(sum*ni)%md);
}
}

  

POJ 2888 Magic Bracelet ——Burnside引理的更多相关文章

  1. poj 2888 Magic Bracelet(Polya+矩阵快速幂)

    Magic Bracelet Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 4990   Accepted: 1610 D ...

  2. POJ 2888 Magic Bracelet(Burnside引理,矩阵优化)

    Magic Bracelet Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 3731   Accepted: 1227 D ...

  3. 【POJ2888】Magic Bracelet Burnside引理+欧拉函数+矩阵乘法

    [POJ2888]Magic Bracelet 题意:一个长度为n的项链,有m种颜色的珠子,有k个限制(a,b)表示颜色为a的珠子和颜色为b的珠子不能相邻,求用m种珠子能串成的项链有多少种.如果一个项 ...

  4. 解题:POJ 2888 Magic Bracelet

    题面 这题虽然很老了但是挺好的 仍然套Burnside引理(因为有限制你并不能套Polya定理),思路和这个题一样,问题主要是如何求方案. 思路是把放珠子的方案看成一张图,然后就巧妙的变成了一个经典的 ...

  5. POJ 2888 Magic Bracelet(burnside引理+矩阵)

    题意:一个长度为n的项链,m种颜色染色每个珠子.一些限制给出有些颜色珠子不能相邻.旋转后相同视为相同.有多少种不同的项链? 思路:这题有点综合,首先,我们对于每个n的因数i,都考虑这个因数i下的不变置 ...

  6. [POJ 2888]Magic Bracelet[Polya Burnside 置换 矩阵]

    也许更好的阅读体验 \(\mathcal{Description}\) 大意:给一条长度为\(n\)的项链,有\(m\)种颜色,另有\(k\)条限制,每条限制为不允许\(x,y\)颜色连在一起.要求有 ...

  7. poj 2888 Magic Bracelet <polya定理>

    题目:http://poj.org/problem?id=2888 题意:给定n(n <= 10^9)颗珠子,组成一串项链,每颗珠子可以用m种颜色中一种来涂色,如果两种涂色方法通过旋转项链可以得 ...

  8. poj 2888 Magic Bracelet

    经典的有限制条件的Burnside计数+矩阵乘法!!! 对于这种限制条件的情况我们可以通过矩阵连乘得到,先初始化矩阵array[i][j]为1.如果颜色a和颜色b不能涂在相邻的珠子, 那么array[ ...

  9. POJ 2888 Magic Bracelet [Polya 矩阵乘法]

    传送门 题意:竟然扯到哈利波特了.... 和上一题差不多,但颜色数很少,给出不能相邻的颜色对 可以相邻的连边建图矩阵乘法求回路个数就得到$f(i)$了.... 感觉这样的环上有限制问题挺套路的...旋 ...

随机推荐

  1. iOS:让UIView覆盖导航栏

    当我们想做一个弹出式菜单时,想将导航栏也一起盖住不显示的话,可以用如下语句实现: UIView* myView = /* 你自定义的view */; UIWindow* currentWindow = ...

  2. How to install Eclipse?

    http://askubuntu.com/questions/26632/how-to-install-eclipse How to install Eclipse? up vote113down v ...

  3. COGS 1710. [POJ2406]字符串的幂

    ★☆   输入文件:powerstrings.in   输出文件:powerstrings.out   简单对比时间限制:3 s   内存限制:256 MB [题目描述] 对于给定的两个字符串a,b, ...

  4. (八)maven学习之继承

    继承 如果项目划分了多个模块,都需要依赖相似的jar包,只需要创建一个父模块,在它的pom.xml文件中配置依赖的jar包.功能模块只需要继承父模块,就可以自动得到其依赖的jar包,而不需要再每个模块 ...

  5. navicate连接mysql

    1. 打开navicate,选择连接 2. 编辑连接属性 编辑完成之后,连接成功.

  6. 远程文件拷贝(fastcopy为例)

    远程地址格式如下:\\IP地址\磁盘符号$\文件夹名称(如:127.0.0.1\\c$\\image)拷贝了image文件夹下面的所有文件,但是如果远程机器有密码的话要先在本机先输入远程的目标地址然后 ...

  7. spring (由Rod Johnson创建的一个开源框架)

    你可能正在想“Spring不过是另外一个的framework”.当已经有许多开放源代码(和专有)J2EEframework时,我们为什么还需要Spring Framework? Spring是独特的, ...

  8. 欧拉函数求在1-n-1与n互质的个数

    long long phi(long long x) { long long res=x,a=x,i; ;i*i<=a;i++) { ) { res=res/i*(i-); ) a=a/i; } ...

  9. 在tomcat中配置连接池

    在tomcat的conf/Catalina/localhost目录下配置项目路径,tomcat启动是会直接根据配置去加载项目. 虽然配置就一句话,但经常忘,今天记下来. 如果你的项目成名是:mypro ...

  10. C++系统学习之八:IO库

    新的C++标准中有三分之二的内容都是描述标准库.接下来重点学习其中几种核心库设施,这些是应该熟练掌握的. 标准库的核心是很多容器类(顺序容器和关联容器等)和一簇泛型算法(该类算法通常在顺序容器一定范围 ...