POJ 2888 Magic Bracelet [Polya 矩阵乘法]
题意:竟然扯到哈利波特了....
和上一题差不多,但颜色数很少,给出不能相邻的颜色对
可以相邻的连边建图矩阵乘法求回路个数就得到$f(i)$了....
感觉这样的环上有限制问题挺套路的...旋转的等价循环个数$t$我们很清楚了,并且环上每$t$个元素各属于不同的循环,我们只要求出$t$个元素满足限制的方案数就能得到$C(f)$了
然后再加上$gcd$取值讨论就降到根号了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e5+,P=;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,m,k,u,v;
int p[N];
bool notp[N];
void sieve(int n){
for(int i=;i<=n;i++){
if(!notp[i]) p[++p[]]=i;
for(int j=;j<=p[]&&i*p[j]<=n;j++){
notp[i*p[j]]=;
if(i%p[j]==) break;
}
}
}
inline int phi(int n){
int re=n,m=sqrt(n);
for(int i=;i<=p[]&&p[i]<=m&&p[i]<=n;i++) if(n%p[i]==){
re=re/p[i]*(p[i]-);
while(n%p[i]==) n/=p[i];
}
if(n>) re=re/n*(n-);
return re%P;
}
struct Matrix{
int a[][];
int* operator [](int x){return a[x];}
Matrix(){memset(a,,sizeof(a));}
void ini(){for(int i=;i<=;i++) a[i][i]=;}
}a;
Matrix operator *(Matrix a,Matrix b){
Matrix c;
for(int k=;k<=m;k++)
for(int i=;i<=m;i++) if(a[i][k])
for(int j=;j<=m;j++) if(b[k][j])
(c[i][j]+=a[i][k]*b[k][j])%=P;
return c;
}
Matrix operator ^(Matrix a,int b){
Matrix re;re.ini();
for(;b;b>>=,a=a*a)
if(b&) re=re*a;
return re;
}
inline void mod(int &x){if(x>=P) x-=P;}
int f(int x){
Matrix b=a^x;
int re=;
for(int i=;i<=m;i++) mod(re+=b[i][i]);
return re;
}
inline int Pow(int a,int b){
int re=;
a%=P;
for(;b;b>>=,a=a*a%P)
if(b&) re=re*a%P;
return re;
}
inline int Inv(int a){return Pow(a,P-);}
void solve(){
int m=sqrt(n),ans=;
for(int i=;i<=m;i++) if(n%i==){
mod(ans+= f(i)*phi(n/i)%P);
if(i*i!=n) mod(ans+= f(n/i)*phi(i)%P);
}
printf("%d\n",ans*Inv(n)%P);
}
int main(){
freopen("in","r",stdin);
sieve();
int T=read();
while(T--){
n=read();m=read();k=read();
for(int i=;i<=m;i++) for(int j=;j<=m;j++) a[i][j]=;
for(int i=;i<=k;i++){
u=read();v=read();
a[u][v]=a[v][u]=;
}
solve();
}
}
POJ 2888 Magic Bracelet [Polya 矩阵乘法]的更多相关文章
- poj 2888 Magic Bracelet(Polya+矩阵快速幂)
Magic Bracelet Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 4990 Accepted: 1610 D ...
- [POJ 2888]Magic Bracelet[Polya Burnside 置换 矩阵]
也许更好的阅读体验 \(\mathcal{Description}\) 大意:给一条长度为\(n\)的项链,有\(m\)种颜色,另有\(k\)条限制,每条限制为不允许\(x,y\)颜色连在一起.要求有 ...
- poj 2888 Magic Bracelet <polya定理>
题目:http://poj.org/problem?id=2888 题意:给定n(n <= 10^9)颗珠子,组成一串项链,每颗珠子可以用m种颜色中一种来涂色,如果两种涂色方法通过旋转项链可以得 ...
- POJ 2888 Magic Bracelet(Burnside引理,矩阵优化)
Magic Bracelet Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 3731 Accepted: 1227 D ...
- POJ 2888 Magic Bracelet(burnside引理+矩阵)
题意:一个长度为n的项链,m种颜色染色每个珠子.一些限制给出有些颜色珠子不能相邻.旋转后相同视为相同.有多少种不同的项链? 思路:这题有点综合,首先,我们对于每个n的因数i,都考虑这个因数i下的不变置 ...
- poj 2888 Magic Bracelet
经典的有限制条件的Burnside计数+矩阵乘法!!! 对于这种限制条件的情况我们可以通过矩阵连乘得到,先初始化矩阵array[i][j]为1.如果颜色a和颜色b不能涂在相邻的珠子, 那么array[ ...
- POJ 2888 Magic Bracelet ——Burnside引理
[题目分析] 同样是Burnside引理.但是有几种颜色是不能放在一起的. 所以DP就好了. 然后T掉 所以矩阵乘法就好了. 然后T掉 所以取模取的少一些,矩阵乘法里的取模尤其要注意,就可以了. A掉 ...
- 解题:POJ 2888 Magic Bracelet
题面 这题虽然很老了但是挺好的 仍然套Burnside引理(因为有限制你并不能套Polya定理),思路和这个题一样,问题主要是如何求方案. 思路是把放珠子的方案看成一张图,然后就巧妙的变成了一个经典的 ...
- HDU 2865 Birthday Toy [Polya 矩阵乘法]
传送门 题意: 相邻珠子不能相同,旋转等价.$n$个珠子$k$中颜色,求方案数 首先中间珠子$k$种选择,$k--$如果没有相邻不同的限制,就和$POJ\ 2154$一样了$|C(f)|=k^{\#( ...
随机推荐
- MongoDb在windows下的安装与以auth方式启用服务
一.下载安装 1.去官网上下载适合自己电脑的MongoDB版本 下载MongoDB 2.安装MongoDB 安装还是比较简单,按照步骤一步一步往下走就可以了. 3.启动MongodDB 安装完成之后 ...
- Lua语言的介绍和编程语言的归类
Lua 本条目介绍的是一种编程语言.关于关于Lua在维基百科中的使用,请见"维基百科:Lua".关于"Lua"一词的其他意思,请见"卢阿". ...
- MLlib--GBDT算法
转载请标明出处http://www.cnblogs.com/haozhengfei/p/8b9cb1875288d9f6cfc2f5a9b2f10eac.html GBDT算法 江湖传言:GBDT算法 ...
- 初识RabbitMQ,附RabbitMQ+PHP演示实例
RabbitMQ是一个在AMQP基础上实现的企业级消息系统.何谓消息系统,就是消息队列系统,消息队列是""消费-生产者模型""的一个典型的代表,一端往消息队列中 ...
- 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类
一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...
- 随手小代码——《Python编程 从入门到实践》项目1:外星人入侵
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- goDaddy SSL证书 Nginx配置全流程 (转)
好长时间没动过这玩意了,今天突然用到,忘的一干二净.在此做个笔记吧! 一.购买Godaddy SSL证书 1.打开Godaddy官网 http://www.godaddy.com/: 2.点击网站导航 ...
- Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置
Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置 ============================== ©Copyright 蕃薯耀 2017 ...
- UltraEdit激活方法
按照UltraEdit 并下载注册机后. 打开UltraEdit 弹出产品是使用 然后点击 输入注册码, 重点:断开网络 点击激活,弹出 离线激活选项. 用户名密码随意输入,打开注册机,把下面的 ...
- Hyperledger Fabric Membership Service Providers (MSP)——成员服务
Membership Service Providers (MSP) 本文将介绍有关MSPs的设置和最佳实践的详细方案. Membership Service Providers (MSP)是一个旨在 ...