[TJOI2017] 可乐
Posted eternhope
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[TJOI2017] 可乐相关的知识,希望对你有一定的参考价值。
水题啊......
把原地不动看成是自环,把自爆看作是走到了0点就行了。
所有点都能走到0点,而0点只能走到自己。
然后邻接矩阵自乘即可。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 6 const int mod=2017; 7 8 struct matrix 9 { 10 int a[35][35]; 11 }e; 12 13 int n,m,t; 14 15 matrix mul(matrix &q,matrix &w) 16 { 17 matrix ret; 18 for(int i=0;i<=n;i++) 19 { 20 for(int j=0;j<=n;j++) 21 { 22 ret.a[i][j]=0; 23 for(int k=0;k<=n;k++) 24 ret.a[i][j]+=q.a[i][k]*w.a[k][j]; 25 ret.a[i][j]%=mod; 26 } 27 } 28 return ret; 29 } 30 31 matrix ksm(matrix b,int p) 32 { 33 matrix ret=b; 34 p--; 35 while(p) 36 { 37 if(p&1)ret=mul(ret,b); 38 b=mul(b,b); 39 p>>=1; 40 } 41 return ret; 42 } 43 44 int main() 45 { 46 scanf("%d%d",&n,&m); 47 for(int i=1;i<=m;i++) 48 { 49 int x,y; 50 scanf("%d%d",&x,&y); 51 e.a[x][y]=e.a[y][x]=1; 52 } 53 for(int i=1;i<=n;i++) 54 { 55 e.a[i][0]=e.a[i][i]=1; 56 } 57 e.a[0][0]=1; 58 scanf("%d",&t); 59 matrix ans=ksm(e,t); 60 int sum=0; 61 for(int i=0;i<=n;i++) 62 sum=(sum+ans.a[1][i])%mod; 63 printf("%d",sum); 64 return 0; 65 }
以上是关于[TJOI2017] 可乐的主要内容,如果未能解决你的问题,请参考以下文章