水题啊......
把原地不动看成是自环,把自爆看作是走到了0点就行了。
所有点都能走到0点,而0点只能走到自己。
然后邻接矩阵自乘即可。
1 #include2 #include 3 #include 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 }