Description

加里敦星球的人们特别喜欢喝可乐。因而,他们的敌对星球研发出了一个可乐机器人,并且
放在了加里敦星球的1号城市上。这个可乐机器人有三种行为:停在原地,去下一个相邻的
城市,自爆。它每一秒都会随机触发一种行为。现在给出加里敦星球城市图,在第0秒时可
乐机器人在1号城市,问经过了t秒,可乐机器人的行为方案数是多少?
 

Input

第一行输入两个正整数N,M表示城市个数,M表示道路个数。(1≤N≤30,0≤M≤100)
接下来M行输入u,v表示u,v之间有一条道路。
(1≤u,v≤n)保证两座城市之间只有一条路相连。
最后输入时间t。1<t≤10^6

Output

输出可乐机器人的行为方案数,答案可能很大,请输出对2017取模后的结果。

Sample Input

3 2
1 2
2 3
2

Sample Output

8

Solution

第一次做到这种以图的形式的递推用矩阵乘法优化的

貌似是套路题但是我不会啊T_T

于是观摩了一波题解弄懂了这种类型的题目

一般是这种T很大N很小的题目就可以矩阵乘法优化

要求走T次就是对邻接矩阵自乘T次...

  1. /**************************************************************
  2.     Problem: 4887
  3.     User: henryy
  4.     Language: C++
  5.     Result: Accepted
  6.     Time:80 ms
  7.     Memory:1456 kb
  8. ****************************************************************/
  9.  
  10. #include <bits/stdc++.h>
  11.  
  12. using namespace std ;
  13.  
  14. #define mod 2017
  15.  
  16. int n , m ;
  17. struct matrix {
  18.     int m[ ][ ] ;
  19.     matrix() {
  20.         memset( m , , sizeof( m ) ) ;
  21.     }
  22.     int *operator[] ( int a ) { return m[ a ] ; }
  23.     matrix operator * ( matrix &x ) {
  24.         matrix ans ;
  25.         memset( ans.m , , sizeof( ans.m ) ) ;
  26.         for( int i = ; i <= n ; i ++ ) {
  27.             for( int j = ; j <= n ; j ++ ) {
  28.                 for( int k = ; k <= n ; k ++ ) {
  29.                     ans[ i ][ j ] = (ans[ i ][ j ] + m[ i ][ k ] * x[ k ][ j ] ) % mod ;
  30.                 }
  31.             }
  32.         }
  33.         return ans ;
  34.     }
  35. } a ;
  36.  
  37. matrix power( matrix x , int b ) {
  38.     matrix ans , base = x ;
  39.     for( int i = ; i <= n ; i ++ ) ans[ i ][ i ] = ;
  40.     while( b ) {
  41.         if( b & ) ans = ans * base ;
  42.         base = base * base ;
  43.         b >>= ;
  44.     }
  45.     return ans ;
  46. }
  47.  
  48. int main() {
  49.     scanf( "%d%d" , &n , &m ) ;
  50.     for( int i = ; i <= m ; i ++ ) {
  51.         int x , y ;
  52.         scanf( "%d%d" , &x , &y ) ;
  53.         a[ x ][ y ] = a[ y ][ x ] = ;
  54.     }
  55.     int t ;
  56.     scanf( "%d" , &t ) ;
  57.     for( int i = ; i <= n ; i ++ ) a[ i ][ i ] = a[ i ][ ] = ;
  58.     a = power( a , t ) ;
  59.     int ans = ;
  60.     for( int i = ; i <= n ; i ++ ) {
  61.         ans = ( ans + a[ ][ i ] ) % mod ;
  62.     }
  63.     printf( "%d\n" , ans ) ;
  64. }

BZOJ4887: [Tjoi2017]可乐 矩阵快速幂的更多相关文章

  1. 洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]

    洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 299  Solved: 207 Description 加里敦星球的人 ...

  2. BZOJ4887:[TJOI2017]可乐(矩阵乘法)

    Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆. ...

  3. 【BZOJ4887】[TJOI2017]可乐(矩阵快速幂)

    [BZOJ4887][TJOI2017]可乐(矩阵快速幂) 题面 BZOJ 洛谷 题解 模板题??? #include<iostream> #include<cstdio> # ...

  4. 【bzoj4887】:[Tjoi2017]可乐 矩阵乘法,快速幂

    [bzoj4887]:[Tjoi2017]可乐 题目大意:一张无相连通图(n<=30),从1号点开始走,每秒可以走到相邻的点也可以自爆,求第t秒(t<=1e6)后所有的方案数是多少对201 ...

  5. Luogu 3758 [TJOI2017]可乐(有向图邻接矩阵幂的意义 矩阵快速幂)

    题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机 ...

  6. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  7. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  8. 51nod 1113 矩阵快速幂

    题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...

  9. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

随机推荐

  1. AndroidStudio自定义TODO

    1.增加自定义TODO标记 Preferences -> Editor -> TODO,然后点击左下角的加号,输入想要自定义的TODO的正则 输入\bX\b.*(X为TODO标签的名字), ...

  2. JDK 伪共享解决方案

    关于AtomicReference AtomicReference是由JAVA5引入的,用于对一个对象引用进行原子操作,我们可以看到AtomicReference的实现是用CAS技术对引用进行指令级别 ...

  3. 深入浅出 TCP/IP 协议栈

    写的不错:http://www.cnblogs.com/onepixel/p/7092302.html#3899256

  4. post方式提交数据

    <!DOCTYPE HTML><html>    <head>        <meta charset="utf-8" />   ...

  5. MYSQL中的BlackHole引擎

    MYSQL中的BlackHole引擎 http://blog.csdn.net/ylspirit/article/details/7234021 http://blog.chinaunix.net/u ...

  6. 实习培训——Java基础(1)

    实习培训——Java基础(1) 1.我的第一个JAVA程序 首先好配置好JDK环境,百度上有很多.创建文件HelloWorld.java(文件名与类名相同),代码如下: public class He ...

  7. Razor中的@:和语法

    用Razor实现流畅编程 Razor尽量减少编写一个视图模板需要敲入的字符数,实现快速流畅的编程工作流.与大部分模板的语法不同,你不必在HTML中为了明确地标记出服务模块 的开始和结束而中断编程.Ra ...

  8. SVM计算过程,对偶形式,核函数

    SVM是一个分类方法,用w^X+b定义分类函数, 于是求w.b,为寻最大间隔,引出1/2||w||^2,继而引入拉格朗日因子,化为对单一因数对偶变量a的求解(求解过程中会涉及到一系列最优化或凸二 次规 ...

  9. iOS 网易彩票-3常见设置

    Navigation导航设置 为了统一管理导航控制器,需要自定义导航控制器MJNavigationController,继承于UINavigationController.分别设置5个Navigati ...

  10. MVC增加操作日志

    在后台管理中,有一些操作是需要增加操作日志的,尤其是对一些比较敏感的金额类的操作,比如商城类的修改商品金额.删除商品.赠送金额等人工的操作.日志中记录着相关操作人的操作信息,这样,出了问题也容易排查. ...