poj 2888

来源:互联网 发布:大学java专业课程 编辑:程序博客网 时间:2024/06/06 08:25

相比于直接polya,多了相邻元素限制,也就是难度在于怎么求 对应置换不变的染色种类,我们考虑用个矩阵来村颜色之间的关系,如果是1就是可相邻,对于不可相邻的,赋值为1,这样对于长度为k的环,种类数就是,根据离散知识:矩阵k次幂,对角线元素之和(开始以为是k-1次幂所有元素之和,但这是个环,要绕回来的,所以是k次幂对角线元素之和)

然后就好搞了。搓比代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MOD = 9973;typedef long long LL;int m,k,n,a,b,T,mat[10][10],tmp[10][10],tp[10][10],prime[36000],is[36000];void getprime(){int cnt=0;for(int i=2;i<36000;i++){if(!is[i]){prime[cnt++]=i;for(int j=i;j<36000;j+=i)is[j]=1;}}}int pow(int x,int y){x=x%MOD;int t=1;while(y){if(y&1)t=(t*x)%MOD;x=(x*x)%MOD;y>>=1;}return t;}void mul(int a[10][10],int b[10][10],int m){int c[10][10];memset(c,0,sizeof(c));for(int i=0;i<m;i++)for(int j=0;j<m;j++)for(int k=0;k<m;k++)c[i][j]=(c[i][j]+a[i][k]*b[k][j])%MOD;for(int i=0;i<m;i++)for(int j=0;j<m;j++)a[i][j]=c[i][j];}int get(int x){memset(tmp,0,sizeof(tmp));for(int i=0;i<m;i++)for(int j=0;j<m;j++)tp[i][j]=mat[i][j];for(int i=0;i<m;i++)tmp[i][i]=1;while(x){if(x&1)mul(tmp,tp,m);mul(tp,tp,m);x>>=1;}int ans=0;for(int i=0;i<m;i++)ans=(ans+tmp[i][i])%MOD;return ans;}int eular(int x){if(x==1)return 1;int rep=x;for(int i=0;prime[i]*prime[i]<=x;i++){if(x%prime[i]==0){rep-=rep/prime[i];x/=prime[i];}while(x%prime[i]==0)x/=prime[i];if(x==1)break;}if(x!=1)rep-=rep/x;return rep%MOD;}int inv(int n){return pow(n,MOD-2)%MOD;}int main(){scanf("%d",&T);getprime();while(T--){scanf("%d%d%d",&n,&m,&k);for(int i=0;i<m;i++)for(int j=0;j<m;j++)mat[i][j]=1;for(int i=0;i<k;i++){scanf("%d%d",&a,&b);a--;b--;mat[a][b]=mat[b][a]=0;}int ans=0;int i;for(i=1;i*i<n;i++){if(n%i==0){ans=(ans+(get(i)*eular(n/i))%MOD)%MOD;ans=(ans+(get(n/i)*eular(i))%MOD)%MOD;}}if(i*i==n)ans=(ans+(get(i)*eular(n/i))%MOD)%MOD;printf("%d\n",(ans*inv(n))%MOD);}return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脸的皮肤油油的怎么办 狗狗子宫蓄脓怎么办 刮宫后子宫壁薄怎么办 产妇有痔疮怎么办很疼 二胎着床在剖腹产切口怎么办 刨腹产3月后怀孕怎么办 破腹产两年了肚子还是很大怎么办 抛妇产后肚子大怎么办 破腹产后想大便怎么办 破腹产后肚子硬怎么办 在月子里同房了怎么办 胃变大凸出来了怎么办 坐完月子脊背疼怎么办 月子过后脊背疼该怎么办 怀孕的时候牙疼怎么办 练瑜伽后弯腰疼怎么办 练完瑜伽腰椎疼怎么办 瑜伽开髋动作受伤怎么办 才学瑜伽教培上课紧张怎么办 瑜伽馆不给退费怎么办 脚运动后酸痛该怎么办 婴儿误吞拉链头怎么办 肠功能蠕动慢便秘怎么办 胃肠型和蠕动波怎么办 胃不蠕动了怎么办偏方 喂母乳母亲奶头裂开怎么办 给宝宝吃奶被吃到奶头裂开怎么办 宝宝吃奶奶头裂开了怎么办 小孩吃奶奶头裂开了怎么办 站久坐久腰酸痛怎么办 孕39周胎儿头小怎么办 怀孕腰两侧长肉怎么办 怀孕四个月半月吃点就饱怎么办啊 怀孕四个月睡眠不好怎么办 二胎七个月肚子太大怎么办 上火牙疼牙龈肿怎么办 孕30周乳房胀痛怎么办 怀孕长妊娠纹了怎么办 坐久了肚子胀疼怎么办 怀孕后胖的太快怎么办 怀孕牙齿全坏了怎么办